Skip to content

Commit 6984f21

Browse files
6eanutramosian-glider
authored andcommitted
executor, sys/linux, pkg: enable syz_kvm_assert_reg for riscv64
- Enables syz_kvm_assert_reg for riscv64. - Updates kvm_one_reg according to the latest definition in https://github.com/torvalds/linux/blob/master/arch/riscv/include/uapi/asm/kvm.h. - Adds a test case: riscv64-kvm-reg.
1 parent ad02db7 commit 6984f21

17 files changed

+174
-87
lines changed

executor/common_kvm_riscv64.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <string.h>
1313
#include <sys/ioctl.h>
1414

15+
#if SYZ_EXECUTOR || __NR_syz_kvm_setup_cpu
1516
struct kvm_text {
1617
uintptr_t type;
1718
const void* text;
@@ -153,5 +154,25 @@ static volatile long syz_kvm_setup_cpu(volatile long a0, volatile long a1, volat
153154

154155
return 0;
155156
}
157+
#endif
158+
159+
#if SYZ_EXECUTOR || __NR_syz_kvm_assert_reg
160+
static long syz_kvm_assert_reg(volatile long a0, volatile long a1, volatile long a2)
161+
{
162+
int vcpu_fd = (int)a0;
163+
uint64 id = (uint64)a1;
164+
uint64 expect = a2, val = 0;
165+
166+
struct kvm_one_reg reg = {.id = id, .addr = (uint64)&val};
167+
int ret = ioctl(vcpu_fd, KVM_GET_ONE_REG, &reg);
168+
if (ret)
169+
return ret;
170+
if (val != expect) {
171+
errno = EDOM;
172+
return -1;
173+
}
174+
return 0;
175+
}
176+
#endif
156177

157178
#endif // EXECUTOR_COMMON_KVM_RISCV64_H

pkg/vminfo/linux_syscalls.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ var linuxSyscallChecks = map[string]func(*checkContext, *prog.Syscall) string{
8585
"syz_kvm_add_vcpu": linuxSyzKvmSupported,
8686
"syz_kvm_assert_syzos_uexit": linuxSyzKvmSupported,
8787
"syz_kvm_assert_syzos_kvm_exit": linuxSyzKvmSupported,
88-
"syz_kvm_assert_reg": linuxSyzSupportedOnArm64,
88+
"syz_kvm_assert_reg": linuxSyzKvmSupported,
8989
"syz_emit_vhci": linuxVhciInjectionSupported,
9090
"syz_init_net_socket": linuxSyzInitNetSocketSupported,
9191
"syz_genetlink_get_family_id": linuxSyzGenetlinkGetFamilyIDSupported,
@@ -188,11 +188,12 @@ func linuxSyzKvmSupported(ctx *checkContext, call *prog.Syscall) string {
188188
return ""
189189
}
190190
case "syz_kvm_setup_cpu$arm64", "syz_kvm_setup_syzos_vm$arm64", "syz_kvm_add_vcpu$arm64",
191-
"syz_kvm_assert_syzos_uexit$arm64", "syz_kvm_assert_syzos_kvm_exit$arm64":
191+
"syz_kvm_assert_syzos_uexit$arm64", "syz_kvm_assert_syzos_kvm_exit$arm64",
192+
"syz_kvm_assert_reg%arm64":
192193
if ctx.target.Arch == targets.ARM64 {
193194
return ""
194195
}
195-
case "syz_kvm_setup_cpu$riscv64":
196+
case "syz_kvm_setup_cpu$riscv64", "syz_kvm_assert_reg$riscv64":
196197
if ctx.target.Arch == targets.RiscV64 {
197198
return ""
198199
}

sys/linux/dev_kvm.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,9 @@ kvm_one_reg [
354354
riscv64_config kvm_one_reg_riscv64[kvm_regs_riscv64_config]
355355
riscv64_core kvm_one_reg_riscv64[kvm_regs_riscv64_core]
356356
riscv64_csr kvm_one_reg_riscv64[kvm_regs_riscv64_csr]
357+
riscv64_timer kvm_one_reg_riscv64[kvm_regs_riscv64_timer]
358+
riscv64_f kvm_one_reg_riscv64[kvm_regs_riscv64_f]
359+
riscv64_d kvm_one_reg_riscv64[kvm_regs_riscv64_d]
357360
]
358361

359362
type kvm_one_reg_riscv64[FTYPE] {
@@ -634,6 +637,9 @@ kvm_regs_arm64_extra = 0x603000000013c01b, 0x603000000013c01f, 0x603000000013c02
634637
# End of register descriptions generated by tools/arm64/registers.go
635638

636639
# For riscv64, https://elixir.bootlin.com/linux/v6.19-rc4/source/Documentation/virt/kvm/api.rst#L2765
637-
kvm_regs_riscv64_config = 0x8030000000100000
640+
kvm_regs_riscv64_config = 0x8030000000100000, 0x8030000000100001, 0x8030000000100002, 0x8030000000100003, 0x8030000000100004, 0x8030000000100005, 0x8030000000100006, 0x8030000000100007
638641
kvm_regs_riscv64_core = 0x8030000000200000, 0x8030000000200001, 0x8030000000200002, 0x8030000000200003, 0x8030000000200004, 0x8030000000200005, 0x8030000000200006, 0x8030000000200007, 0x8030000000200008, 0x8030000000200009, 0x803000000020000a, 0x803000000020000b, 0x803000000020000c, 0x803000000020000d, 0x803000000020000e, 0x803000000020000f, 0x8030000000200010, 0x8030000000200011, 0x8030000000200012, 0x8030000000200013, 0x8030000000200014, 0x8030000000200015, 0x8030000000200016, 0x8030000000200017, 0x8030000000200018, 0x8030000000200019, 0x803000000020001a, 0x803000000020001b, 0x803000000020001c, 0x803000000020001d, 0x803000000020001e, 0x803000000020001f, 0x8030000000200020
639642
kvm_regs_riscv64_csr = 0x8030000000300000, 0x8030000000300001, 0x8030000000300002, 0x8030000000300003, 0x8030000000300004, 0x8030000000300005, 0x8030000000300006, 0x8030000000300007, 0x8030000000300008
643+
kvm_regs_riscv64_timer = 0x8030000004000000, 0x8030000004000001, 0x8030000004000002, 0x8030000004000003
644+
kvm_regs_riscv64_f = 0x8020000005000000, 0x8020000005000001, 0x8020000005000002, 0x8020000005000003, 0x8020000005000004, 0x8020000005000005, 0x8020000005000006, 0x8020000005000007, 0x8020000005000008, 0x8020000005000009, 0x802000000500000a, 0x802000000500000b, 0x802000000500000c, 0x802000000500000d, 0x802000000500000e, 0x802000000500000f, 0x8020000005000010, 0x8020000005000011, 0x8020000005000012, 0x8020000005000013, 0x8020000005000014, 0x8020000005000015, 0x8020000005000016, 0x8020000005000017, 0x8020000005000018, 0x8020000005000019, 0x802000000500001a, 0x802000000500001b, 0x802000000500001c, 0x802000000500001d, 0x802000000500001e, 0x802000000500001f, 0x8020000005000020
645+
kvm_regs_riscv64_d = 0x8030000006000000, 0x8030000006000001, 0x8030000006000002, 0x8030000006000003, 0x8030000006000004, 0x8030000006000005, 0x8030000006000006, 0x8030000006000007, 0x8030000006000008, 0x8030000006000009, 0x803000000600000a, 0x803000000600000b, 0x803000000600000c, 0x803000000600000d, 0x803000000600000e, 0x803000000600000f, 0x8030000006000010, 0x8030000006000011, 0x8030000006000012, 0x8030000006000013, 0x8030000006000014, 0x8030000006000015, 0x8030000006000016, 0x8030000006000017, 0x8030000006000018, 0x8030000006000019, 0x803000000600001a, 0x803000000600001b, 0x803000000600001c, 0x803000000600001d, 0x803000000600001e, 0x803000000600001f, 0x8020000006000020

sys/linux/dev_kvm_arm64.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ syz_kvm_vgic_v3_setup(fd fd_kvmvm, ncpus intptr[0:4], nirqs flags[kvm_num_irqs])
2828

2929
# Test assertions, will not be used by the fuzzer.
3030
syz_kvm_assert_syzos_uexit$arm64(cpufd fd_kvmcpu, run kvm_run_ptr, exitcode int64) (no_generate)
31-
syz_kvm_assert_reg(fd fd_kvmcpu, reg int64, value int64) (no_generate)
31+
syz_kvm_assert_reg$arm64(fd fd_kvmcpu, reg int64, value int64) (no_generate)
3232
syz_kvm_assert_syzos_kvm_exit$arm64(run kvm_run_ptr, exitcode int64) (no_generate)
3333

3434
# Old-style way to set up a CPU inside a KVM VM.

sys/linux/dev_kvm_riscv64.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,5 @@ kvm_text_riscv64 {
3131
text ptr[in, text[riscv64]]
3232
size len[text, intptr]
3333
}
34+
35+
syz_kvm_assert_reg$riscv64(fd fd_kvmcpu, reg int64, value int64) (no_generate)

sys/linux/test/arm64-syz_kvm_setup_syzos_vm-enable-pmu-msr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ r5 = mmap$KVM_VCPU(&(0x7f0000009000/0x1000)=nil, r4, 0x3, 0x1, r3, 0x0)
2323
#
2424
ioctl$KVM_RUN(r3, AUTO, 0x0)
2525
syz_kvm_assert_syzos_uexit$arm64(r3, r5, 0xffffffffffffffff)
26-
syz_kvm_assert_reg(r3, 0x603000000013df40, 0x8000)
26+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df40, 0x8000)

sys/linux/test/arm64-syz_kvm_setup_syzos_vm-enable-pmu-msr-emul-0

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ r5 = mmap$KVM_VCPU(&(0x7f0000009000/0x1000)=nil, r4, 0x3, 0x1, r3, 0x0)
3636
#
3737
ioctl$KVM_RUN(r3, AUTO, 0x0)
3838
syz_kvm_assert_syzos_uexit$arm64(r3, r5, 0xffffffffffffffff)
39-
syz_kvm_assert_reg(r3, 0x603000000013c4f1, 0x8000)
40-
syz_kvm_assert_reg(r3, 0x603000000013c4f2, 0x8000)
41-
syz_kvm_assert_reg(r3, 0x603000000013dce0, 0x8000)
42-
syz_kvm_assert_reg(r3, 0x603000000013dce1, 0x8000)
43-
syz_kvm_assert_reg(r3, 0x603000000013dce2, 0x8000)
44-
syz_kvm_assert_reg(r3, 0x603000000013dce3, 0x8000)
45-
syz_kvm_assert_reg(r3, 0x603000000013dce4, 0x8000)
46-
syz_kvm_assert_reg(r3, 0x603000000013dce5, 0x8000)
47-
syz_kvm_assert_reg(r3, 0x603000000013dce8, 0x8000)
48-
syz_kvm_assert_reg(r3, 0x603000000013dce9, 0x8000)
39+
syz_kvm_assert_reg$arm64(r3, 0x603000000013c4f1, 0x8000)
40+
syz_kvm_assert_reg$arm64(r3, 0x603000000013c4f2, 0x8000)
41+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce0, 0x8000)
42+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce1, 0x8000)
43+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce2, 0x8000)
44+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce3, 0x8000)
45+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce4, 0x8000)
46+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce5, 0x8000)
47+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce8, 0x8000)
48+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dce9, 0x8000)

sys/linux/test/arm64-syz_kvm_setup_syzos_vm-enable-pmu-msr-emul-1

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ r5 = mmap$KVM_VCPU(&(0x7f0000009000/0x1000)=nil, r4, 0x3, 0x1, r3, 0x0)
3636
#
3737
ioctl$KVM_RUN(r3, AUTO, 0x0)
3838
syz_kvm_assert_syzos_uexit$arm64(r3, r5, 0xffffffffffffffff)
39-
syz_kvm_assert_reg(r3, 0x603000000013dcea, 0x8000)
40-
syz_kvm_assert_reg(r3, 0x603000000013dcf0, 0x8000)
41-
syz_kvm_assert_reg(r3, 0x603000000013dcf3, 0x8000)
42-
syz_kvm_assert_reg(r3, 0x603000000013df40, 0x8000)
43-
syz_kvm_assert_reg(r3, 0x603000000013df41, 0x8000)
44-
syz_kvm_assert_reg(r3, 0x603000000013df42, 0x8000)
45-
syz_kvm_assert_reg(r3, 0x603000000013df43, 0x8000)
46-
syz_kvm_assert_reg(r3, 0x603000000013df44, 0x8000)
47-
syz_kvm_assert_reg(r3, 0x603000000013df45, 0x8000)
48-
syz_kvm_assert_reg(r3, 0x603000000013df7f, 0x8000)
39+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dcea, 0x8000)
40+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dcf0, 0x8000)
41+
syz_kvm_assert_reg$arm64(r3, 0x603000000013dcf3, 0x8000)
42+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df40, 0x8000)
43+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df41, 0x8000)
44+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df42, 0x8000)
45+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df43, 0x8000)
46+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df44, 0x8000)
47+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df45, 0x8000)
48+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df7f, 0x8000)

sys/linux/test/arm64-syz_kvm_setup_syzos_vm-enable-pmu-msr-emul-2

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ r5 = mmap$KVM_VCPU(&(0x7f0000009000/0x1000)=nil, r4, 0x3, 0x1, r3, 0x0)
3333
#
3434
ioctl$KVM_RUN(r3, AUTO, 0x0)
3535
syz_kvm_assert_syzos_uexit$arm64(r3, r5, 0xffffffffffffffff)
36-
syz_kvm_assert_reg(r3, 0x603000000013df60, 0x8000)
37-
syz_kvm_assert_reg(r3, 0x603000000013df61, 0x8000)
38-
syz_kvm_assert_reg(r3, 0x603000000013df62, 0x8000)
39-
syz_kvm_assert_reg(r3, 0x603000000013df63, 0x8000)
40-
syz_kvm_assert_reg(r3, 0x603000000013df64, 0x8000)
41-
syz_kvm_assert_reg(r3, 0x603000000013df65, 0x8000)
42-
syz_kvm_assert_reg(r3, 0x603000000013df7f, 0x8000)
36+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df60, 0x8000)
37+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df61, 0x8000)
38+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df62, 0x8000)
39+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df63, 0x8000)
40+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df64, 0x8000)
41+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df65, 0x8000)
42+
syz_kvm_assert_reg$arm64(r3, 0x603000000013df7f, 0x8000)

sys/linux/test/arm64-syz_kvm_setup_syzos_vm-msr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ r5 = mmap$KVM_VCPU(&(0x7f0000009000/0x1000)=nil, r4, 0x3, 0x1, r3, 0x0)
1515
#
1616
ioctl$KVM_RUN(r3, AUTO, 0x0)
1717
syz_kvm_assert_syzos_uexit$arm64(r3, r5, 0xffffffffffffffff)
18-
syz_kvm_assert_reg(r3, 0x603000000013c600, 0xfefefee0)
18+
syz_kvm_assert_reg$arm64(r3, 0x603000000013c600, 0xfefefee0)

0 commit comments

Comments
 (0)