diff options
| author | Alexey Kardashevskiy <aik@linux.ibm.com> | 2021-07-13 16:13:04 +1000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2021-07-19 11:29:36 +0200 |
| commit | a0fbb62d9577118fda219fbd475f5ea3d08ea303 (patch) | |
| tree | 1ceae9cf9bef552ccbca006cd547e2d889868b15 /sys/linux | |
| parent | e00224d9ff393517c827e5e827f7638a9eaff812 (diff) | |
executor/common_kvm_ppc64: run with enabled MMU
This sets up a page table to map the text in order to exercise
more code paths in the KVM.
This defines flags to control the MMU state. When enabled, this
creates a simple page table at the 64K offset and maps all the RAM.
The fuzzer code is placed right after the table.
The flags are:
IR - enables MMU for instruction fetches
DR - enables MMU for data loads/stores
PR - "problem state", i.e. userspace (implies DR and IR)
PID1 - initializes a process table for PID>0 (PID#0 is used by the VM OS
normally)
This adds a simple "syz_kvm_setup_cpu_ppc64" syz-test with MSR=IR|DR|LE
which is a typical Linux kernel mode.
Signed-off-by: Alexey Kardashevskiy <aik@linux.ibm.com>
Diffstat (limited to 'sys/linux')
| -rw-r--r-- | sys/linux/dev_kvm.txt | 6 | ||||
| -rw-r--r-- | sys/linux/test/syz_kvm_setup_cpu_ppc64le | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/sys/linux/dev_kvm.txt b/sys/linux/dev_kvm.txt index 59b4b787a..713c6cb40 100644 --- a/sys/linux/dev_kvm.txt +++ b/sys/linux/dev_kvm.txt @@ -299,9 +299,13 @@ define KVM_SETUP_VIRT86 (1<<4) define KVM_SETUP_SMM (1<<5) define KVM_SETUP_VM (1<<6) -kvm_setup_flags_ppc64 = KVM_SETUP_PPC64_LE +kvm_setup_flags_ppc64 = KVM_SETUP_PPC64_LE, KVM_SETUP_PPC64_IR, KVM_SETUP_PPC64_DR, KVM_SETUP_PPC64_PR, KVM_SETUP_PPC64_PID1 define KVM_SETUP_PPC64_LE (1<<0) # Little endian +define KVM_SETUP_PPC64_IR (1<<1) # Paging for instructions +define KVM_SETUP_PPC64_DR (1<<2) # Paging for data +define KVM_SETUP_PPC64_PR (1<<3) # Run with MSR_PR (==usermode) +define KVM_SETUP_PPC64_PID1 (1<<4) # Set PID=1 i.e. not kernel's PID kvm_guest_debug { ctrl flags[kvm_guest_debug_flags, int32] diff --git a/sys/linux/test/syz_kvm_setup_cpu_ppc64le b/sys/linux/test/syz_kvm_setup_cpu_ppc64le new file mode 100644 index 000000000..4ced5673e --- /dev/null +++ b/sys/linux/test/syz_kvm_setup_cpu_ppc64le @@ -0,0 +1,8 @@ +# +# requires: arch=ppc64le +# +r0 = openat$kvm(0, &AUTO='/dev/kvm\x00', 0x0, 0x0) +r1 = ioctl$KVM_CREATE_VM(r0, 0x2000ae01, 0x0) +r2 = ioctl$KVM_CREATE_VCPU(r1, 0x2000ae41, 0x0) +syz_kvm_setup_cpu$ppc64(r1, r2, &(0x7f0000fe8000/0x180000)=nil, &(0x7f0000000000)=[{0x0, &(0x7f0000001000)="0000a03c0000a560c607a578ad0ba564dec0a560782ba47c7823837c", 0x1c}], 0x1, 0x7, 0x0, 0x0) +ioctl$KVM_RUN(r2, 0x2000ae80, 0x0) |
