File valgrind.xen-4.11-handle-IOCTL_PRIVCMD_MMAP_RESOURCE.patch of Package valgrind

From: Olaf Hering <olaf@aepfle.de>
Date: Tue, 20 Nov 2018 11:05:35 +0100
Subject: xen-4.11: handle IOCTL_PRIVCMD_MMAP_RESOURCE

Handle IOCTL_PRIVCMD_MMAP_RESOURCE

bz#390553
---
 coregrind/m_syswrap/syswrap-linux.c | 18 ++++++++++++++++++
 include/vki/vki-linux.h             |  9 +++++++++
 2 files changed, 27 insertions(+)

--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -8441,24 +8441,41 @@ PRE(sys_ioctl)
       struct vki_xen_privcmd_dm_op *args =
          (struct vki_xen_privcmd_dm_op *)(ARG3);
       PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_DM_OP(dom)",
                   (Addr)&args->dom, sizeof(args->dom));
       PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_DM_OP(num)",
                   (Addr)&args->num, sizeof(args->num));
       PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_DM_OP(ubufs)",
                   (Addr)args->ubufs, sizeof(*(args->ubufs)) * args->num);
       break;
    }
    case VKI_XEN_IOCTL_PRIVCMD_RESTRICT:
       break;
+   case VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE: {
+      struct vki_xen_privcmd_mmap_resource *args =
+         (struct vki_xen_privcmd_mmap_resource *)(ARG3);
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(dom)",
+                  (Addr)&args->dom, sizeof(args->dom));
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(type)",
+                  (Addr)&args->type, sizeof(args->type));
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(id)",
+                  (Addr)&args->id, sizeof(args->id));
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(idx)",
+                  (Addr)&args->idx, sizeof(args->idx));
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(num)",
+                  (Addr)&args->num, sizeof(args->num));
+      PRE_MEM_READ("VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE(addr)",
+                  (Addr)&args->addr, sizeof(args->addr));
+      break;
+   }
 
    case VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ: {
          struct vki_xen_ioctl_evtchn_bind_virq *args =
             (struct vki_xen_ioctl_evtchn_bind_virq *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ(virq)",
                  (Addr)&args->virq, sizeof(args->virq));
       }
       break;
    case VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN: {
          struct vki_xen_ioctl_evtchn_bind_interdomain *args =
             (struct vki_xen_ioctl_evtchn_bind_interdomain *)(Addr)(ARG3);
          PRE_MEM_READ("VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN(remote_domain)",
@@ -11160,24 +11177,25 @@ POST(sys_ioctl)
        struct vki_xen_privcmd_mmapbatch_v2 *args =
            (struct vki_xen_privcmd_mmapbatch_v2 *)(Addr)(ARG3);
        POST_MEM_WRITE((Addr)args->err, sizeof(*(args->err)) * args->num);
       }
       break;
    case VKI_XEN_IOCTL_PRIVCMD_DM_OP: {
       struct vki_xen_privcmd_dm_op *args =
          (struct vki_xen_privcmd_dm_op *)(ARG3);
       POST_MEM_WRITE((Addr)args->ubufs, sizeof(*(args->ubufs)) * args->num);
       }
       break;
    case VKI_XEN_IOCTL_PRIVCMD_RESTRICT:
+   case VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE:
       break;
 
    case VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ:
    case VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN:
    case VKI_XEN_IOCTL_EVTCHN_BIND_UNBOUND_PORT:
    case VKI_XEN_IOCTL_EVTCHN_UNBIND:
    case VKI_XEN_IOCTL_EVTCHN_NOTIFY:
    case VKI_XEN_IOCTL_EVTCHN_RESET:
       /* No output */
       break;
    case VKI_XEN_IOCTL_GNTDEV_MAP_GRANT_REF: {
        struct vki_xen_ioctl_gntdev_map_grant_ref *args =
--- a/include/vki/vki-linux.h
+++ b/include/vki/vki-linux.h
@@ -3459,33 +3459,42 @@ struct vki_xen_privcmd_mmapbatch_v2 {
 
 struct vki_xen_privcmd_dm_op_buf {
         void __user *uptr;
         __vki_kernel_size_t size;
 };
 
 struct vki_xen_privcmd_dm_op {
         __vki_u16 dom;
         __vki_u16 num;
         const struct vki_xen_privcmd_dm_op_buf __user *ubufs;
 };
 
+struct vki_xen_privcmd_mmap_resource {
+        __vki_u16 dom;
+        __vki_u32 type;
+        __vki_u32 id;
+        __vki_u32 idx;
+        __vki_u64 num;
+        __vki_u64 addr;
+};
 
 #define VKI_XEN_IOCTL_PRIVCMD_HYPERCALL    _VKI_IOC(_VKI_IOC_NONE, 'P', 0, sizeof(struct vki_xen_privcmd_hypercall))
 #define VKI_XEN_IOCTL_PRIVCMD_MMAP         _VKI_IOC(_VKI_IOC_NONE, 'P', 2, sizeof(struct vki_xen_privcmd_mmap))
 
 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH    _VKI_IOC(_VKI_IOC_NONE, 'P', 3, sizeof(struct vki_xen_privcmd_mmapbatch))
 #define VKI_XEN_IOCTL_PRIVCMD_MMAPBATCH_V2 _VKI_IOC(_VKI_IOC_NONE, 'P', 4, sizeof(struct vki_xen_privcmd_mmapbatch_v2))
 
 #define VKI_XEN_IOCTL_PRIVCMD_DM_OP        _VKI_IOC(_VKI_IOC_NONE, 'P', 5, sizeof(struct vki_xen_privcmd_dm_op))
 #define VKI_XEN_IOCTL_PRIVCMD_RESTRICT     _VKI_IOC(_VKI_IOC_NONE, 'P', 6, sizeof(__vki_u16))
+#define VKI_XEN_IOCTL_PRIVCMD_MMAP_RESOURCE _VKI_IOC(_VKI_IOC_NONE, 'P', 7, sizeof(struct vki_xen_privcmd_mmap_resource))
 
 //----------------------------------------------------------------------
 // Xen evtchn IOCTL
 //----------------------------------------------------------------------
 
 #define VKI_XEN_IOCTL_EVTCHN_BIND_VIRQ				\
 	_VKI_IOC(_VKI_IOC_NONE, 'E', 0, sizeof(struct vki_xen_ioctl_evtchn_bind_virq))
 struct vki_xen_ioctl_evtchn_bind_virq {
 	vki_uint32_t virq;
 };
 
 #define VKI_XEN_IOCTL_EVTCHN_BIND_INTERDOMAIN			\
openSUSE Build Service is sponsored by