]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
xen: XEN_DOMCTL_getpageframeinfo3 hypercall
authorBart Van Assche <bvanassche@acm.org>
Sun, 1 Dec 2013 10:56:28 +0000 (10:56 +0000)
committerBart Van Assche <bvanassche@acm.org>
Sun, 1 Dec 2013 10:56:28 +0000 (10:56 +0000)
Xen reads 'num' and the 'array' pointer from ARG1, and proceeds to read and
modify-in-place the entire userspace array.

From: Andrew Cooper <andrew.cooper3@citrix.com>
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@13733

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

index f5053bb607219a3db914eb0713318a6b8f74f6af..116276fe54c5b9a20c65c05bfe9c1d519672c58e 100644 (file)
@@ -673,6 +673,14 @@ PRE(domctl)
                    (Addr)&domctl->u.cpuid, sizeof(domctl->u.cpuid));
       break;
 
+   case VKI_XEN_DOMCTL_getpageframeinfo3:
+       PRE_XEN_DOMCTL_READ(getpageframeinfo3, num);
+       PRE_XEN_DOMCTL_READ(getpageframeinfo3, array.p);
+       PRE_MEM_READ("XEN_DOMCTL_getpageframeinfo3 *u.getpageframeinfo3.array.p",
+                    (Addr)domctl->u.getpageframeinfo3.array.p,
+                    domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
+       break;
+
    case VKI_XEN_DOMCTL_getvcpuextstate:
       __PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, vcpu);
       __PRE_XEN_DOMCTL_READ(getvcpuextstate, vcpuextstate, xfeature_mask);
@@ -1182,6 +1190,12 @@ POST(domctl){
       __POST_XEN_DOMCTL_WRITE(getvcpucontext, vcpucontext, ctxt.p);
       break;
 
+   case VKI_XEN_DOMCTL_getpageframeinfo3:
+       POST_MEM_WRITE((Addr)domctl->u.getpageframeinfo3.array.p,
+                      domctl->u.getpageframeinfo3.num * sizeof(vki_xen_pfn_t));
+       break;
+
+
    case VKI_XEN_DOMCTL_getvcpuextstate:
       __POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, xfeature_mask);
       __POST_XEN_DOMCTL_WRITE(getvcpuextstate, vcpuextstate, size);
index 24191bdc2a0b1459844b713dbb9187815bc3acd0..67dc2efcc1b24392da2c6b180e3e88ace4da5173 100644 (file)
@@ -163,6 +163,10 @@ struct vki_xen_domctl_nodeaffinity {
 typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
 
+struct vki_xen_domctl_getpageframeinfo3 {
+    vki_xen_uint64_aligned_t num; /* IN */
+    VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
+};
 
 struct vki_xen_domctl_vcpuaffinity {
     vki_uint32_t  vcpu;              /* IN */
@@ -278,7 +282,7 @@ struct vki_xen_domctl {
         //struct vki_xen_domctl_getmemlist        getmemlist;
         //struct vki_xen_domctl_getpageframeinfo  getpageframeinfo;
         //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
-        //struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
+        struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
         struct vki_xen_domctl_nodeaffinity      nodeaffinity;
         struct vki_xen_domctl_vcpuaffinity      vcpuaffinity;
         //struct vki_xen_domctl_shadow_op         shadow_op;