aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--executor/common_kvm_arm64_syzos.h24
-rw-r--r--sys/linux/dev_kvm_arm64.txt18
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]