Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARC: use correct offset in pt_regs for saving/restoring user mode r25

User mode callee regs are explicitly collected before signal delivery or
breakpoint trap. r25 is special for kernel as it serves as task pointer,
so user mode value is clobbered very early. It is saved in pt_regs where
generally only scratch (aka caller saved) regs are saved.

The code to access the corresponding pt_regs location had a subtle bug as
it was using load/store with scaling of offset, whereas the offset was already
byte wise correct. So fix this by replacing LD.AS with a standard LD

Cc: <stable@vger.kernel.org>
Signed-off-by: Liav Rehana <liavr@mellanox.com>
Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com>
[vgupta: rewrote title and commit log]
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

authored by

Liav Rehana and committed by
Vineet Gupta
86147e3c 45c3b08a

+2 -2
+2 -2
arch/arc/include/asm/entry.h
··· 142 142 143 143 #ifdef CONFIG_ARC_CURR_IN_REG 144 144 ; Retrieve orig r25 and save it with rest of callee_regs 145 - ld.as r12, [r12, PT_user_r25] 145 + ld r12, [r12, PT_user_r25] 146 146 PUSH r12 147 147 #else 148 148 PUSH r25 ··· 198 198 199 199 ; SP is back to start of pt_regs 200 200 #ifdef CONFIG_ARC_CURR_IN_REG 201 - st.as r12, [sp, PT_user_r25] 201 + st r12, [sp, PT_user_r25] 202 202 #endif 203 203 .endm 204 204