From: Bart Van Assche Date: Sun, 1 Dec 2013 10:51:19 +0000 (+0000) Subject: xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa X-Git-Tag: svn/VALGRIND_3_10_0~711 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbbdd846be2e2cf2d58fd862316b0d6d1ef7a171;p=thirdparty%2Fvalgrind.git xen: Fix XEN_SYSCTL_getdomaininfolist for version 0xa From: Andrew Cooper 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 Signed-off-by: Ian Campbell git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13725 --- diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c index ce300e825a..0314451ce6 100644 --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -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; diff --git a/include/vki/vki-xen-sysctl.h b/include/vki/vki-xen-sysctl.h index 453752cd3d..06cbaf6b45 100644 --- a/include/vki/vki-xen-sysctl.h +++ b/include/vki/vki-xen-sysctl.h @@ -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;