[PATCH 20/38] arm64: probes: Reject stepping over ALLINT
Vladimir Murzin
vladimir.murzin at arm.com
Mon Sep 14 03:20:44 PDT 2026
ALLINT instructions are not safe for probing. Both the register and
immediate forms of MSR for ALLINT are currently rejected because they
match aarch64_insn_is_msr_{imm,reg}(). However, MRS instructions
accessing ALLINT need to be rejected explicitly.
Signed-off-by: Vladimir Murzin <vladimir.murzin at arm.com>
---
arch/arm64/include/asm/insn.h | 1 +
arch/arm64/kernel/probes/decode-insn.c | 11 +++++++----
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/include/asm/insn.h b/arch/arm64/include/asm/insn.h
index 1ce75a442638..0a81b5feb2ed 100644
--- a/arch/arm64/include/asm/insn.h
+++ b/arch/arm64/include/asm/insn.h
@@ -118,6 +118,7 @@ enum aarch64_insn_special_register {
AARCH64_INSN_SPCLREG_SP_EL0 = 0xC208,
AARCH64_INSN_SPCLREG_SPSEL = 0xC210,
AARCH64_INSN_SPCLREG_CURRENTEL = 0xC212,
+ AARCH64_INSN_SPCLREG_ALLINT = 0xC218,
AARCH64_INSN_SPCLREG_DAIF = 0xDA11,
AARCH64_INSN_SPCLREG_NZCV = 0xDA10,
AARCH64_INSN_SPCLREG_FPCR = 0xDA20,
diff --git a/arch/arm64/kernel/probes/decode-insn.c b/arch/arm64/kernel/probes/decode-insn.c
index 4137cc5ef031..a98d9d30fb4a 100644
--- a/arch/arm64/kernel/probes/decode-insn.c
+++ b/arch/arm64/kernel/probes/decode-insn.c
@@ -36,11 +36,14 @@ static bool __kprobes aarch64_insn_is_steppable(u32 insn)
/*
* The MRS instruction may not return a correct value when
* executing in the single-stepping environment. We do make one
- * exception, for reading the DAIF bits.
+ * exception, for reading the DAIF and ALLINT bits.
*/
- if (aarch64_insn_is_mrs(insn))
- return aarch64_insn_extract_system_reg(insn)
- != AARCH64_INSN_SPCLREG_DAIF;
+ if (aarch64_insn_is_mrs(insn)) {
+ u32 sysreg = aarch64_insn_extract_system_reg(insn);
+
+ return (sysreg != AARCH64_INSN_SPCLREG_DAIF) &&
+ (sysreg != AARCH64_INSN_SPCLREG_ALLINT);
+ }
/*
* The HINT instruction is steppable only if it is in whitelist
--
2.34.1
More information about the linux-arm-kernel
mailing list