]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa
authorBart Van Assche <bvanassche@acm.org>
Sun, 1 Dec 2013 10:51:19 +0000 (10:51 +0000)
committerBart Van Assche <bvanassche@acm.org>
Sun, 1 Dec 2013 10:51:19 +0000 (10:51 +0000)
From: Andrew Cooper <andrew.cooper3@citrix.com>

Also add a default case so future bumps of the sysctl interface version dont
result in spurious passes of the IOCTL handler.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13725

coregrind/m_syswrap/syswrap-xen.c
include/vki/vki-xen-sysctl.h

index ce300e825ab199c804d6655c6a7a283cf0414cab..0314451ce631e266fe92316f1d385b5d8446bfae 100644 (file)
@@ -401,6 +401,17 @@ PRE(sysctl) {
         PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, max_domains);
         PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer);
         break;
+      case 0x0000000a:
+        PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, first_domain);
+        PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, max_domains);
+        PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, buffer);
+        break;
+      default:
+          VG_(dmsg)("WARNING: XEN_SYSCTL_getdomaininfolist for sysctl version "
+                    "%"PRIx32" not implemented yet\n",
+                    sysctl->interface_version);
+          SET_STATUS_Failure(VKI_EINVAL);
+          return;
       }
       break;
 
@@ -801,6 +812,12 @@ POST(sysctl)
                        sizeof(*sysctl->u.getdomaininfolist_00000009.buffer.p)
                        * sysctl->u.getdomaininfolist_00000009.num_domains);
         break;
+      case 0x0000000a:
+        POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000a, num_domains);
+        POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000a.buffer.p,
+                       sizeof(*sysctl->u.getdomaininfolist_0000000a.buffer.p)
+                       * sysctl->u.getdomaininfolist_0000000a.num_domains);
+        break;
       }
       break;
 
index 453752cd3db6a99a76f706c231abc1ed29278d94..06cbaf6b450216ffba34ade4244247fc46173f30 100644 (file)
@@ -56,6 +56,15 @@ struct vki_xen_sysctl_getdomaininfolist_00000009 {
     vki_uint32_t              num_domains;
 };
 
+struct vki_xen_sysctl_getdomaininfolist_0000000a {
+    /* IN variables. */
+    vki_xen_domid_t           first_domain;
+    vki_uint32_t              max_domains;
+    VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000009_t) buffer;
+    /* OUT variables. */
+    vki_uint32_t              num_domains;
+};
+
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE                1  /* C */
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY               2  /* D */
 #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO                  3  /* I */
@@ -139,6 +148,7 @@ struct vki_xen_sysctl {
         //struct vki_xen_sysctl_perfc_op          perfc_op;
         struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008;
         struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009;
+        struct vki_xen_sysctl_getdomaininfolist_0000000a getdomaininfolist_0000000a;
         //struct vki_xen_sysctl_debug_keys        debug_keys;
         //struct vki_xen_sysctl_getcpuinfo        getcpuinfo;
         //struct vki_xen_sysctl_availheap         availheap;