From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 09/13] xen: XEN_DOMCTL_getpageframeinfo3 hypercall Date: Thu, 28 Nov 2013 18:56:57 +0000 Message-ID: <1385665021-5392-10-git-send-email-andrew.cooper3@citrix.com> References: <1385665021-5392-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1385665021-5392-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org Xen reads 'num' and the 'array' pointer from ARG1, and proceeds to read and modify-in-place the entire userspace array. Signed-off-by: Andrew Cooper --- coregrind/m_syswrap/syswrap-xen.c | 14 ++++++++++++++ include/vki/vki-xen-domctl.h | 6 +++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c index f5053bb..116276f 100644 --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -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); diff --git a/include/vki/vki-xen-domctl.h b/include/vki/vki-xen-domctl.h index 24191bd..67dc2ef 100644 --- a/include/vki/vki-xen-domctl.h +++ b/include/vki/vki-xen-domctl.h @@ -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; -- 1.7.10.4