Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-buildrequires
valgrind
valgrind.fix-XEN_SYSCTL_getdomaininfolist.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File valgrind.fix-XEN_SYSCTL_getdomaininfolist.patch of Package valgrind
From: Olaf Hering <olaf@aepfle.de> Date: Fri, 28 Feb 2020 13:49:03 +0100 Subject: fix XEN_SYSCTL_getdomaininfolist While there is just a single variant of xen_sysctl_getdomaininfolist for XEN_SYSCTL_getdomaininfolist, the contained buffer pointer points to a variant of xen_domctl_getdomaininfo_t. For the various Xen versions a number of variants of xen_domctl_getdomaininfo_t exist. As a result, each variant of xen_domctl_getdomaininfo_t needs a variant of xen_sysctl_getdomaininfolist for POST(sysctl). Remove variant 0000000a, such variant of xen_domctl_getdomaininfo_t does not exist. The next known variant is 0000000f Signed-off-by: Olaf Hering <olaf@aepfle.de> --- coregrind/m_syswrap/syswrap-xen.c | 84 ++++++++++++++++++++++++++++++++++++++++++++---------------------------------------- include/vki/vki-xen-domctl.h | 12 +++++------- include/vki/vki-xen-sysctl.h | 18 ++++++++---------- 3 files changed, 57 insertions(+), 57 deletions(-) --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -667,53 +667,53 @@ PRE(sysctl) { /* These are all unconditionally read */ PRE_XEN_SYSCTL_READ(readconsole, clear); PRE_XEN_SYSCTL_READ(readconsole, incremental); PRE_XEN_SYSCTL_READ(readconsole, buffer); PRE_XEN_SYSCTL_READ(readconsole, count); /* 'index' only read if 'incremental' is nonzero */ if (sysctl->u.readconsole.incremental) PRE_XEN_SYSCTL_READ(readconsole, index); break; case VKI_XEN_SYSCTL_getdomaininfolist: - switch (sysctl->interface_version) - { + switch (sysctl->interface_version) { + case 0x00000007: + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000007, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000007, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000007, buffer); + break; case 0x00000008: - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, first_domain); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, max_domains); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, buffer); - break; + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000008, buffer); + break; case 0x00000009: - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, first_domain); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, max_domains); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer); - break; case 0x0000000a: case 0x0000000b: case 0x0000000c: case 0x0000000d: case 0x0000000e: + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_00000009, buffer); + break; case 0x0000000f: - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, first_domain); - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, max_domains); - PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000a, buffer); - break; case 0x00000010: case 0x00000011: case 0x00000012: - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000010, first_domain); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000010, max_domains); - PRE_XEN_SYSCTL_READ(getdomaininfolist_00000010, buffer); - break; + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, first_domain); + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, max_domains); + PRE_XEN_SYSCTL_READ(getdomaininfolist_0000000f, 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; case VKI_XEN_SYSCTL_debug_keys: PRE_XEN_SYSCTL_READ(debug_keys, keys); PRE_XEN_SYSCTL_READ(debug_keys, nr_keys); @@ -1910,57 +1910,61 @@ POST(sysctl) POST_MEM_WRITE((Addr)&sysctl->u._union._field, \ sizeof(sysctl->u._union._field)) #define POST_XEN_SYSCTL_WRITE(_sysctl, _field) \ __POST_XEN_SYSCTL_WRITE(_sysctl, _sysctl, _field) switch (sysctl->cmd) { case VKI_XEN_SYSCTL_readconsole: POST_MEM_WRITE((Addr)sysctl->u.readconsole.buffer.p, sysctl->u.readconsole.count * sizeof(char)); break; case VKI_XEN_SYSCTL_getdomaininfolist: - switch (sysctl->interface_version) - { + switch (sysctl->interface_version) { + case 0x00000007: + POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000007, num_domains); + if (sysctl->u.getdomaininfolist_00000007.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000007.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_00000007.buffer.p) * + sysctl->u.getdomaininfolist_00000007.num_domains); + break; case 0x00000008: - POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000008, num_domains); - POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000008.buffer.p, - sizeof(*sysctl->u.getdomaininfolist_00000008.buffer.p) - * sysctl->u.getdomaininfolist_00000008.num_domains); - break; + POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000008, num_domains); + if (sysctl->u.getdomaininfolist_00000008.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000008.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_00000008.buffer.p) * + sysctl->u.getdomaininfolist_00000008.num_domains); + break; case 0x00000009: - POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000009, num_domains); - POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000009.buffer.p, - sizeof(*sysctl->u.getdomaininfolist_00000009.buffer.p) - * sysctl->u.getdomaininfolist_00000009.num_domains); - break; case 0x0000000a: case 0x0000000b: case 0x0000000c: case 0x0000000d: case 0x0000000e: + POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000009, num_domains); + if (sysctl->u.getdomaininfolist_00000009.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000009.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_00000009.buffer.p) * + sysctl->u.getdomaininfolist_00000009.num_domains); + break; case 0x0000000f: - 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; case 0x00000010: case 0x00000011: case 0x00000012: - POST_XEN_SYSCTL_WRITE(getdomaininfolist_00000010, num_domains); - POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_00000010.buffer.p, - sizeof(*sysctl->u.getdomaininfolist_00000010.buffer.p) - * sysctl->u.getdomaininfolist_00000010.num_domains); - break; + POST_XEN_SYSCTL_WRITE(getdomaininfolist_0000000f, num_domains); + if (sysctl->u.getdomaininfolist_0000000f.num_domains > 0) + POST_MEM_WRITE((Addr)sysctl->u.getdomaininfolist_0000000f.buffer.p, + sizeof(*sysctl->u.getdomaininfolist_0000000f.buffer.p) * + sysctl->u.getdomaininfolist_0000000f.num_domains); + break; } break; case VKI_XEN_SYSCTL_sched_id: POST_XEN_SYSCTL_WRITE(sched_id, sched_id); break; case VKI_XEN_SYSCTL_cpupool_op: if (sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE || sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_INFO) POST_XEN_SYSCTL_WRITE(cpupool_op, cpupool_id); if (sysctl->u.cpupool_op.op == VKI_XEN_SYSCTL_CPUPOOL_OP_INFO) { --- a/include/vki/vki-xen-domctl.h +++ b/include/vki/vki-xen-domctl.h @@ -180,50 +180,48 @@ struct vki_xen_domctl_getdomaininfo_00000009 { vki_xen_uint64_aligned_t shared_info_frame; vki_xen_uint64_aligned_t cpu_time; vki_uint32_t nr_online_vcpus; vki_uint32_t max_vcpu_id; vki_uint32_t ssidref; vki_xen_domain_handle_t handle; vki_uint32_t cpupool; }; typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t; DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t); // x86 version only for now -struct vki_xen_arch_domainconfig_00000010 { +struct vki_xen_arch_domainconfig_0000000b { vki_uint32_t emulation_flags; }; -struct vki_xen_domctl_getdomaininfo_00000010 { +struct vki_xen_domctl_getdomaininfo_0000000f { /* OUT variables. */ vki_xen_domid_t domain; vki_uint32_t flags; vki_xen_uint64_aligned_t tot_pages; vki_xen_uint64_aligned_t max_pages; vki_xen_uint64_aligned_t outstanding_pages; vki_xen_uint64_aligned_t shr_pages; vki_xen_uint64_aligned_t paged_pages; vki_xen_uint64_aligned_t shared_info_frame; vki_xen_uint64_aligned_t cpu_time; vki_uint32_t nr_online_vcpus; vki_uint32_t max_vcpu_id; vki_uint32_t ssidref; vki_xen_domain_handle_t handle; vki_uint32_t cpupool; - struct vki_xen_arch_domainconfig_00000010 arch; + struct vki_xen_arch_domainconfig_0000000b arch; }; -typedef struct vki_xen_domctl_getdomaininfo_00000010 vki_xen_domctl_getdomaininfo_00000010_t; -DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000010_t); - -/* vki_xen_domctl_getdomaininfo_0000000a is the same as 00000009 */ +typedef struct vki_xen_domctl_getdomaininfo_0000000f vki_xen_domctl_getdomaininfo_0000000f_t; +DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_0000000f_t); /* Get/set the NUMA node(s) with which the guest has affinity with. */ /* XEN_DOMCTL_setnodeaffinity */ /* XEN_DOMCTL_getnodeaffinity */ struct vki_xen_domctl_nodeaffinity { struct vki_xenctl_bitmap nodemap;/* IN */ }; 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 */ --- a/include/vki/vki-xen-sysctl.h +++ b/include/vki/vki-xen-sysctl.h @@ -51,62 +51,59 @@ struct vki_xen_sysctl_readconsole { * OUT: End index after consuming from the console. */ vki_uint32_t index; VKI_XEN_GUEST_HANDLE_64(char) buffer; /* IN */ /* * IN: size of buffer. * OUT: bytes written into buffer. */ vki_uint32_t count; }; -struct vki_xen_sysctl_getdomaininfolist_00000008 { +struct vki_xen_sysctl_getdomaininfolist_00000007 { /* IN variables. */ vki_xen_domid_t first_domain; vki_uint32_t max_domains; VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000007_t) buffer; /* OUT variables. */ vki_uint32_t num_domains; }; - -struct vki_xen_sysctl_getdomaininfolist_00000009 { +struct vki_xen_sysctl_getdomaininfolist_00000008 { /* IN variables. */ vki_xen_domid_t first_domain; vki_uint32_t max_domains; VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000008_t) buffer; /* OUT variables. */ vki_uint32_t num_domains; }; -struct vki_xen_sysctl_getdomaininfolist_0000000a { +struct vki_xen_sysctl_getdomaininfolist_00000009 { /* 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; }; -struct vki_xen_sysctl_getdomaininfolist_00000010 { +struct vki_xen_sysctl_getdomaininfolist_0000000f { /* IN variables. */ vki_xen_domid_t first_domain; vki_uint32_t max_domains; - VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000010_t) buffer; + VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_0000000f_t) buffer; /* OUT variables. */ vki_uint32_t num_domains; }; -/* vki_xen_sysctl_getdomaininfolist_0000000b is the same as 0000000a */ - #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 */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU 4 /* A */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU 5 /* R */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */ #define VKI_XEN_SYSCTL_CPUPOOL_OP_FREEINFO 7 /* F */ #define VKI_XEN_SYSCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF struct vki_xen_sysctl_cpupool_op { vki_uint32_t op; /* IN */ vki_uint32_t cpupool_id; /* IN: CDIARM OUT: CI */ vki_uint32_t sched_id; /* IN: C OUT: I */ @@ -195,28 +192,29 @@ struct vki_xen_sysctl { vki_uint32_t cmd; vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ union { struct vki_xen_sysctl_readconsole readconsole; //struct vki_xen_sysctl_tbuf_op tbuf_op; struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008; struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a; struct vki_xen_sysctl_physinfo_00000010 physinfo_00000010; struct vki_xen_sysctl_topologyinfo topologyinfo; struct vki_xen_sysctl_numainfo numainfo; struct vki_xen_sysctl_sched_id sched_id; //struct vki_xen_sysctl_perfc_op perfc_op; + /* getdomaininfolist (sysctl) suffix is the getdomaininfo (domctl) suffix */ + struct vki_xen_sysctl_getdomaininfolist_00000007 getdomaininfolist_00000007; 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_getdomaininfolist_00000010 getdomaininfolist_00000010; + struct vki_xen_sysctl_getdomaininfolist_0000000f getdomaininfolist_0000000f; struct vki_xen_sysctl_debug_keys debug_keys; //struct vki_xen_sysctl_getcpuinfo getcpuinfo; //struct vki_xen_sysctl_availheap availheap; //struct vki_xen_sysctl_get_pmstat get_pmstat; //struct vki_xen_sysctl_cpu_hotplug cpu_hotplug; //struct vki_xen_sysctl_pm_op pm_op; //struct vki_xen_sysctl_page_offline_op page_offline; //struct vki_xen_sysctl_lockprof_op lockprof_op; struct vki_xen_sysctl_cpupool_op cpupool_op; //struct vki_xen_sysctl_scheduler_op scheduler_op; //struct vki_xen_sysctl_coverage_op coverage_op;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor