From c2baee9b7bf043702c130de0771a4df439fcf403 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Fri, 12 Jun 2015 10:54:12 +0000 Subject: [PATCH] add KVM_S390_MEMOP ioctl handling git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15334 --- coregrind/m_syswrap/syswrap-linux.c | 25 +++++++++++++++++++++++++ include/vki/vki-linux.h | 18 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index c042ddaf2d..660b27a43c 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -7220,6 +7220,21 @@ PRE(sys_ioctl) case VKI_KVM_RUN: break; + case VKI_KVM_S390_MEM_OP: { + struct vki_kvm_s390_mem_op *args = + (struct vki_kvm_s390_mem_op *)(ARG3); + PRE_MEM_READ("ioctl(KVM_S390_MEM_OP)", ARG3, + sizeof(struct vki_kvm_s390_mem_op)); + if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY) + break; + if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ) + PRE_MEM_WRITE("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size); + if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_WRITE) + PRE_MEM_READ("ioctl(KVM_S390_MEM_OP).buf", (Addr)args->buf, args->size); + } + break; + + #ifdef ENABLE_XEN case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: { SyscallArgs harrghs; @@ -9614,6 +9629,16 @@ POST(sys_ioctl) case VKI_KVM_KVMCLOCK_CTRL: break; + case VKI_KVM_S390_MEM_OP: { + struct vki_kvm_s390_mem_op *args = + (struct vki_kvm_s390_mem_op *)(ARG3); + if (args->flags & VKI_KVM_S390_MEMOP_F_CHECK_ONLY) + break; + if (args->op == VKI_KVM_S390_MEMOP_LOGICAL_READ) + POST_MEM_WRITE((Addr)args->buf, args->size); + } + break; + #ifdef ENABLE_XEN case VKI_XEN_IOCTL_PRIVCMD_HYPERCALL: { SyscallArgs harrghs; diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 34f3fee7be..874717f793 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -3167,6 +3167,24 @@ struct vki_sockaddr_rc { #define VKI_KVM_NMI _VKI_IO(KVMIO, 0x9a) #define VKI_KVM_KVMCLOCK_CTRL _VKI_IO(KVMIO, 0xad) +struct vki_kvm_s390_mem_op { + /* in */ + __vki_u64 gaddr; /* the guest address */ + __vki_u64 flags; /* flags */ + __vki_u32 size; /* amount of bytes */ + __vki_u32 op; /* type of operation */ + __vki_u64 buf; /* buffer in userspace */ + __vki_u8 ar; /* the access register number */ + __vki_u8 reserved[31]; /* should be set to 0 */ +}; + +#define VKI_KVM_S390_MEMOP_LOGICAL_READ 0 +#define VKI_KVM_S390_MEMOP_LOGICAL_WRITE 1 +#define VKI_KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0) +#define VKI_KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1) + +#define VKI_KVM_S390_MEM_OP _VKI_IOW(KVMIO, 0xb1, struct vki_kvm_s390_mem_op) + //---------------------------------------------------------------------- // From linux-2.6/include/linux/net_stamp.h //---------------------------------------------------------------------- -- 2.47.2