From 09017703fac0755f8fc6362abe16a3206bccf333 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Tue, 10 Dec 2024 13:38:43 +0100 Subject: pkg/vminfo: sys/linux: executor: define syz_kvm_assert_syzos_uexit() The new pseudo-syscall will serve as a test assertion, checking the uexit return value. This is going to help us validate SyzOS code. --- executor/common_kvm_arm64.h | 19 +++++++++++++++++++ executor/common_linux.h | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'executor') diff --git a/executor/common_kvm_arm64.h b/executor/common_kvm_arm64.h index 66697b2cf..02e84aad8 100644 --- a/executor/common_kvm_arm64.h +++ b/executor/common_kvm_arm64.h @@ -361,3 +361,22 @@ static long syz_kvm_vgic_v3_setup(volatile long a0, volatile long a1, volatile l return vgic_fd; } #endif + +#if SYZ_EXECUTOR || __NR_syz_kvm_assert_syzos_uexit +static long syz_kvm_assert_syzos_uexit(volatile long a0, volatile long a1) +{ + struct kvm_run* run = (struct kvm_run*)a0; + uint64 expect = a1; + + if (!run || (run->exit_reason != KVM_EXIT_MMIO) || (run->mmio.phys_addr != ARM64_ADDR_UEXIT)) { + errno = EINVAL; + return -1; + } + + if ((((uint64*)(run->mmio.data))[0]) != expect) { + errno = EDOM; + return -1; + } + return 0; +} +#endif diff --git a/executor/common_linux.h b/executor/common_linux.h index a84b2eeb0..5fc1bec2c 100644 --- a/executor/common_linux.h +++ b/executor/common_linux.h @@ -3186,7 +3186,7 @@ error_clear_loop: } #endif -#if SYZ_EXECUTOR || __NR_syz_kvm_setup_cpu || __NR_syz_kvm_vgic_v3_setup || __NR_syz_kvm_setup_syzos_vm || __NR_syz_kvm_add_vcpu +#if SYZ_EXECUTOR || __NR_syz_kvm_setup_cpu || __NR_syz_kvm_vgic_v3_setup || __NR_syz_kvm_setup_syzos_vm || __NR_syz_kvm_add_vcpu || __NR_syz_kvm_assert_syzos_uexit // KVM is not yet supported on RISC-V #if !GOARCH_riscv64 && !GOARCH_arm #include -- cgit mrf-deployment