diff options
| author | Alexander Potapenko <glider@google.com> | 2025-09-17 14:46:01 +0200 |
|---|---|---|
| committer | Alexander Potapenko <glider@google.com> | 2025-09-19 08:38:14 +0000 |
| commit | ecab01f19835ae5984daf74b219e32cf85b053c8 (patch) | |
| tree | 34fabe683818d02965a97601d77a7654c5ac3eef /sys | |
| parent | adbde109f03932b9eee8106ce8bad4bc506d0713 (diff) | |
sys/linux: rework ioctl$KVM_SET_GUEST_DEBUG
This ioctl accepts an arch-specific struct as an argument, so better split it
into several arch-specific ioctls.
To avoid compilation errors on exotic arches like MIPS, this patch also adds
sys/linux/dev_kvm_extra.txt that takes care of them.
While at it, also define KVM_GUESTDBG_USE_HW.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/linux/dev_kvm.txt | 8 | ||||
| -rw-r--r-- | sys/linux/dev_kvm.txt.const | 1 | ||||
| -rw-r--r-- | sys/linux/dev_kvm_amd64.txt | 5 | ||||
| -rw-r--r-- | sys/linux/dev_kvm_arm64.txt | 9 | ||||
| -rw-r--r-- | sys/linux/dev_kvm_extra.txt | 12 |
5 files changed, 30 insertions, 5 deletions
diff --git a/sys/linux/dev_kvm.txt b/sys/linux/dev_kvm.txt index 919fcc3aa..ec342b320 100644 --- a/sys/linux/dev_kvm.txt +++ b/sys/linux/dev_kvm.txt @@ -78,8 +78,6 @@ ioctl$KVM_GET_ONE_REG(fd fd_kvmcpu, cmd const[KVM_GET_ONE_REG], arg ptr[in, kvm_ ioctl$KVM_KVMCLOCK_CTRL(fd fd_kvmcpu, cmd const[KVM_KVMCLOCK_CTRL]) ioctl$KVM_S390_INTERRUPT_CPU(fd fd_kvmcpu, cmd const[KVM_S390_INTERRUPT], arg ptr[in, kvm_s390_interrupt]) ioctl$KVM_GET_REG_LIST(fd fd_kvmcpu, cmd const[KVM_GET_REG_LIST], arg ptr[inout, kvm_reg_list]) -ioctl$KVM_SET_GUEST_DEBUG(fd fd_kvmcpu, cmd const[KVM_SET_GUEST_DEBUG], arg ptr[in, kvm_guest_debug]) - ioctl$KVM_SET_DEVICE_ATTR(fd fd_kvmdev, cmd const[KVM_SET_DEVICE_ATTR], arg ptr[in, kvm_device_attr]) ioctl$KVM_GET_DEVICE_ATTR(fd fd_kvmdev, cmd const[KVM_GET_DEVICE_ATTR], arg ptr[in, kvm_device_attr]) ioctl$KVM_HAS_DEVICE_ATTR(fd fd_kvmdev, cmd const[KVM_HAS_DEVICE_ATTR], arg ptr[in, kvm_device_attr]) @@ -108,7 +106,7 @@ kvm_ioeventfd_flags = KVM_IOEVENTFD_FLAG_DATAMATCH, KVM_IOEVENTFD_FLAG_PIO, KVM_ kvm_ioeventfd_len = 0, 1, 2, 4, 8 kvm_device_type = KVM_DEV_TYPE_FSL_MPIC_20, KVM_DEV_TYPE_FSL_MPIC_42, KVM_DEV_TYPE_XICS, KVM_DEV_TYPE_VFIO, KVM_DEV_TYPE_ARM_VGIC_V2, KVM_DEV_TYPE_FLIC, KVM_DEV_TYPE_ARM_VGIC_V3, KVM_DEV_TYPE_ARM_VGIC_ITS, KVM_DEV_TYPE_XIVE, KVM_DEV_TYPE_ARM_PV_TIME, KVM_DEV_TYPE_RISCV_AIA kvm_device_flags = 0, KVM_CREATE_DEVICE_TEST -kvm_guest_debug_flags = KVM_GUESTDBG_ENABLE, KVM_GUESTDBG_SINGLESTEP, KVM_GUESTDBG_USE_SW_BP, KVM_GUESTDBG_USE_HW_BP, KVM_GUESTDBG_INJECT_DB, KVM_GUESTDBG_INJECT_BP, KVM_GUESTDBG_EXIT_PENDING, KVM_GUESTDBG_BLOCKIRQ +kvm_guest_debug_flags = KVM_GUESTDBG_ENABLE, KVM_GUESTDBG_SINGLESTEP, KVM_GUESTDBG_USE_SW_BP, KVM_GUESTDBG_USE_HW_BP, KVM_GUESTDBG_USE_HW, KVM_GUESTDBG_INJECT_DB, KVM_GUESTDBG_INJECT_BP, KVM_GUESTDBG_EXIT_PENDING, KVM_GUESTDBG_BLOCKIRQ kvm_guest_selector = 0, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16 kvm_dirty_log_protect = KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE, KVM_DIRTY_LOG_INITIALLY_SET kvm_dirty_log_sizes = 4096, 8192, 16384, 32768, 65536 @@ -166,10 +164,10 @@ define KVM_SETUP_PPC64_PR (1<<3) # Set PID=1 i.e. not kernel's PID define KVM_SETUP_PPC64_PID1 (1<<4) -kvm_guest_debug { +type kvm_guest_debug[ARCH] { ctrl flags[kvm_guest_debug_flags, int32] pad const[0, int32] - reg array[int64, 8] + arch ARCH } kvm_reg_list { diff --git a/sys/linux/dev_kvm.txt.const b/sys/linux/dev_kvm.txt.const index 7f313efdb..b43af3832 100644 --- a/sys/linux/dev_kvm.txt.const +++ b/sys/linux/dev_kvm.txt.const @@ -84,6 +84,7 @@ KVM_GUESTDBG_EXIT_PENDING = 386:amd64:arm64:mips64le:ppc64le:???, s390x:26843545 KVM_GUESTDBG_INJECT_BP = 524288, arm64:mips64le:ppc64le:s390x:??? KVM_GUESTDBG_INJECT_DB = 262144, arm64:mips64le:ppc64le:s390x:??? KVM_GUESTDBG_SINGLESTEP = 2 +KVM_GUESTDBG_USE_HW = 386:amd64:mips64le:ppc64le:s390x:???, arm64:131072 KVM_GUESTDBG_USE_HW_BP = 131072, arm64:mips64le:???, s390x:65536 KVM_GUESTDBG_USE_SW_BP = 65536, mips64le:s390x:??? KVM_HAS_DEVICE_ATTR = 1075359459, mips64le:ppc64le:2149101283 diff --git a/sys/linux/dev_kvm_amd64.txt b/sys/linux/dev_kvm_amd64.txt index 41fb947cd..43474f9f6 100644 --- a/sys/linux/dev_kvm_amd64.txt +++ b/sys/linux/dev_kvm_amd64.txt @@ -483,6 +483,7 @@ ioctl$KVM_GET_FPU(fd fd_kvmcpu, cmd const[KVM_GET_FPU], arg ptr[out, kvm_fpu]) ioctl$KVM_SET_FPU(fd fd_kvmcpu, cmd const[KVM_SET_FPU], arg ptr[in, kvm_fpu]) ioctl$KVM_GET_DEBUGREGS(fd fd_kvmcpu, cmd const[KVM_GET_DEBUGREGS], arg ptr[out, kvm_debugregs]) ioctl$KVM_SET_DEBUGREGS(fd fd_kvmcpu, cmd const[KVM_SET_DEBUGREGS], arg ptr[in, kvm_debugregs]) +ioctl$KVM_SET_GUEST_DEBUG_x86(fd fd_kvmcpu, cmd const[KVM_SET_GUEST_DEBUG], arg ptr[in, kvm_guest_debug[kvm_guest_debug_arch_x86]]) ioctl$KVM_GET_XCRS(fd fd_kvmcpu, cmd const[KVM_GET_XCRS], arg ptr[out, kvm_xcrs]) ioctl$KVM_SET_XCRS(fd fd_kvmcpu, cmd const[KVM_SET_XCRS], arg ptr[in, kvm_xcrs]) ioctl$KVM_GET_XSAVE(fd fd_kvmcpu, cmd const[KVM_GET_XSAVE], arg ptr[out, kvm_xsave]) @@ -519,6 +520,10 @@ ioctl$KVM_GET_XSAVE2(fd fd_kvmcpu, cmd const[KVM_GET_XSAVE2], arg vma) ioctl$KVM_GET_SREGS2(fd fd_kvmcpu, cmd const[KVM_GET_SREGS2], arg ptr[out, kvm_sregs2]) ioctl$KVM_SET_SREGS2(fd fd_kvmcpu, cmd const[KVM_SET_SREGS2], arg ptr[in, kvm_sregs2]) +kvm_guest_debug_arch_x86 { + reg array[int64, 8] +} + kvm_nested_state { flags flags[kvm_nested_state_flags, int16] format const[0, int16] diff --git a/sys/linux/dev_kvm_arm64.txt b/sys/linux/dev_kvm_arm64.txt index 53e2d71e8..f4c724606 100644 --- a/sys/linux/dev_kvm_arm64.txt +++ b/sys/linux/dev_kvm_arm64.txt @@ -58,6 +58,15 @@ kvm_arm_device_addr { addr flags[kvm_guest_addrs, int64] } +kvm_guest_debug_arch_arm64 { + dbg_bcr array[int64, 16] + dbg_bvr array[int64, 16] + dbg_wcr array[int64, 16] + dbg_wvr array[int64, 16] +} + +ioctl$KVM_SET_GUEST_DEBUG_arm64(fd fd_kvmcpu, cmd const[KVM_SET_GUEST_DEBUG], arg ptr[in, kvm_guest_debug[kvm_guest_debug_arch_arm64]]) + ioctl$KVM_ARM_VCPU_INIT(fd fd_kvmcpu, cmd const[KVM_ARM_VCPU_INIT], arg ptr[in, kvm_vcpu_init]) ioctl$KVM_ARM_PREFERRED_TARGET(fd fd_kvmcpu, cmd const[KVM_ARM_PREFERRED_TARGET], arg ptr[out, kvm_vcpu_init]) # KVM_ARM_VCPU_FINALIZE accepts a single CPU feature encoded as a bit number: https://docs.kernel.org/virt/kvm/api.html#kvm-arm-vcpu-finalize. diff --git a/sys/linux/dev_kvm_extra.txt b/sys/linux/dev_kvm_extra.txt new file mode 100644 index 000000000..395ce577d --- /dev/null +++ b/sys/linux/dev_kvm_extra.txt @@ -0,0 +1,12 @@ +# Copyright 2025 syzkaller project authors. All rights reserved. +# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +# This file is used for non-x86, non-ARM definitions. + +meta arches["mips64le", "ppc64le", "s390x"] + +ioctl$KVM_SET_GUEST_DEBUG_generic(fd fd_kvmcpu, cmd const[KVM_SET_GUEST_DEBUG], arg ptr[in, kvm_guest_debug[kvm_guest_debug_arch_generic]]) + +kvm_guest_debug_arch_generic { + reg array[int64, 8] +} |
