diff options
| -rw-r--r-- | executor/common_kvm_arm64_syzos.h | 24 | ||||
| -rw-r--r-- | sys/linux/dev_kvm_arm64.txt | 18 |
2 files changed, 23 insertions, 19 deletions
diff --git a/executor/common_kvm_arm64_syzos.h b/executor/common_kvm_arm64_syzos.h index 63b571cb3..70074bfbf 100644 --- a/executor/common_kvm_arm64_syzos.h +++ b/executor/common_kvm_arm64_syzos.h @@ -18,17 +18,21 @@ // Start/end of the guest section. extern char *__start_guest, *__stop_guest; +// Compilers will eagerly try to transform the switch statement in guest_main() +// into a jump table, unless the cases are sparse enough. +// We use prime numbers multiplied by 10 to prevent this behavior. +// Remember these constants must match those in sys/linux/dev_kvm_arm64.txt. typedef enum { - SYZOS_API_UEXIT, - SYZOS_API_CODE, - SYZOS_API_MSR, - SYZOS_API_SMC, - SYZOS_API_HVC, - SYZOS_API_IRQ_SETUP, - SYZOS_API_MEMWRITE, - SYZOS_API_ITS_SETUP, - SYZOS_API_ITS_SEND_CMD, - SYZOS_API_MRS, + SYZOS_API_UEXIT = 0, + SYZOS_API_CODE = 10, + SYZOS_API_MSR = 20, + SYZOS_API_SMC = 30, + SYZOS_API_HVC = 50, + SYZOS_API_IRQ_SETUP = 70, + SYZOS_API_MEMWRITE = 110, + SYZOS_API_ITS_SETUP = 130, + SYZOS_API_ITS_SEND_CMD = 170, + SYZOS_API_MRS = 190, SYZOS_API_STOP, // Must be the last one } syzos_api_id; diff --git a/sys/linux/dev_kvm_arm64.txt b/sys/linux/dev_kvm_arm64.txt index ef9a1a4b7..d4dfde828 100644 --- a/sys/linux/dev_kvm_arm64.txt +++ b/sys/linux/dev_kvm_arm64.txt @@ -203,13 +203,13 @@ type syzos_api[NUM, PAYLOAD] { syzos_api_call [ uexit syzos_api[0, intptr] - code syzos_api[1, syzos_api_code] - msr syzos_api[2, syzos_api_msr] - smc syzos_api[3, syzos_api_smccc] - hvc syzos_api[4, syzos_api_smccc] - irq_setup syzos_api[5, syzos_api_irq_setup] - memwrite syzos_api[6, syzos_api_memwrite] - its_setup syzos_api[7, syzos_api_its_setup] - its_send_cmd syzos_api[8, syzos_api_its_send_cmd] - mrs syzos_api[9, syzos_api_mrs] + code syzos_api[10, syzos_api_code] + msr syzos_api[20, syzos_api_msr] + smc syzos_api[30, syzos_api_smccc] + hvc syzos_api[50, syzos_api_smccc] + irq_setup syzos_api[70, syzos_api_irq_setup] + memwrite syzos_api[110, syzos_api_memwrite] + its_setup syzos_api[130, syzos_api_its_setup] + its_send_cmd syzos_api[170, syzos_api_its_send_cmd] + mrs syzos_api[190, syzos_api_mrs] ] [varlen] |
