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. --- pkg/runtest/run.go | 17 +++++++++++++---- pkg/vminfo/linux_syscalls.go | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'pkg') diff --git a/pkg/runtest/run.go b/pkg/runtest/run.go index 213ce3f58..ca3ed3b4b 100644 --- a/pkg/runtest/run.go +++ b/pkg/runtest/run.go @@ -563,10 +563,19 @@ func checkCallResult(req *runRequest, isC bool, run, call int, info *flatrpc.Pro if len(inf.Signal) < 2 && !calls[callName] && len(info.Extra.Signal) == 0 { return fmt.Errorf("run %v: call %v: no signal", run, call) } - // syz_btf_id_by_name is a pseudo-syscall that might not provide - // any coverage when invoked. - if len(inf.Cover) == 0 && callName != "syz_btf_id_by_name" { - return fmt.Errorf("run %v: call %v: no cover", run, call) + // Pseudo-syscalls that might not provide any coverage when invoked. + noCovSyscalls := []string{"syz_btf_id_by_name", "syz_kvm_assert_syzos_uexit"} + if len(inf.Cover) == 0 { + found := true + for _, s := range noCovSyscalls { + if callName == s { + found = true + break + } + } + if !found { + return fmt.Errorf("run %v: call %v: no cover", run, call) + } } calls[callName] = true } else { diff --git a/pkg/vminfo/linux_syscalls.go b/pkg/vminfo/linux_syscalls.go index 95e3e54eb..935c9feea 100644 --- a/pkg/vminfo/linux_syscalls.go +++ b/pkg/vminfo/linux_syscalls.go @@ -83,6 +83,7 @@ var linuxSyscallChecks = map[string]func(*checkContext, *prog.Syscall) string{ "syz_kvm_vgic_v3_setup": linuxSyzSupportedOnArm64, "syz_kvm_setup_syzos_vm": linuxSyzSupportedOnArm64, "syz_kvm_add_vcpu": linuxSyzSupportedOnArm64, + "syz_kvm_assert_syzos_uexit": linuxSyzSupportedOnArm64, "syz_emit_vhci": linuxVhciInjectionSupported, "syz_init_net_socket": linuxSyzInitNetSocketSupported, "syz_genetlink_get_family_id": linuxSyzGenetlinkGetFamilyIDSupported, -- cgit mrf-deployment