From 1b5a5af29c4b2bfe604f97fd28ec07e28e6b0140 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:22:53 +0100 Subject: [PATCH] Revert "arm64: probes: Fix simulate_ldr*_literal()" This reverts commit f2ddadb749b90533cf165284287f3db8caeda573. --- arch/arm64/kernel/probes/simulate-insn.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/arch/arm64/kernel/probes/simulate-insn.c b/arch/arm64/kernel/probes/simulate-insn.c index 7d63423ea..25f67ec59 100755 --- a/arch/arm64/kernel/probes/simulate-insn.c +++ b/arch/arm64/kernel/probes/simulate-insn.c @@ -170,15 +170,17 @@ simulate_tbz_tbnz(u32 opcode, long addr, struct pt_regs *regs) void __kprobes simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs) { - unsigned long load_addr; + u64 *load_addr; int xn = opcode & 0x1f; + int disp; - load_addr = addr + ldr_displacement(opcode); + disp = ldr_displacement(opcode); + load_addr = (u64 *) (addr + disp); if (opcode & (1 << 30)) /* x0-x30 */ - set_x_reg(regs, xn, READ_ONCE(*(u64 *)load_addr)); + set_x_reg(regs, xn, *load_addr); else /* w0-w30 */ - set_w_reg(regs, xn, READ_ONCE(*(u32 *)load_addr)); + set_w_reg(regs, xn, *load_addr); instruction_pointer_set(regs, instruction_pointer(regs) + 4); } @@ -186,12 +188,14 @@ simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs) void __kprobes simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs) { - unsigned long load_addr; + s32 *load_addr; int xn = opcode & 0x1f; + int disp; - load_addr = addr + ldr_displacement(opcode); + disp = ldr_displacement(opcode); + load_addr = (s32 *) (addr + disp); - set_x_reg(regs, xn, READ_ONCE(*(s32 *)load_addr)); + set_x_reg(regs, xn, *load_addr); instruction_pointer_set(regs, instruction_pointer(regs) + 4); }