Patch "powerpc/kprobe: Fix oops when kprobed on 'stdu' instruction" has been added to the 3.18-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
powerpc/kprobe: Fix oops when kprobed on 'stdu' instruction
to the 3.18-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
powerpc-kprobe-fix-oops-when-kprobed-on-stdu-instruction.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9e1ba4f27f018742a1aa95d11e35106feba08ec1Mon Sep 17 00:00:00 2001
From: Ravi Bangoria <[email protected]>
Date: Tue, 11 Apr 2017 10:38:13 +0530
Subject: powerpc/kprobe: Fix oops when kprobed on 'stdu' instruction
From: Ravi Bangoria <[email protected]>
commit 9e1ba4f27f018742a1aa95d11e35106feba08ec1 upstream.
If we set a kprobe on a 'stdu' instruction on powerpc64, we see a kernel OOPS:
Bad kernel stack pointer cd93c840 at c000000000009868
Oops: Bad kernel stack pointer, sig: 6 [#1] ... GPR00: c000001fcd93cb30 00000000cd93c840 c0000000015c5e00 00000000cd93c840 ... NIP [c000000000009868] resume_kernel+0x2c/0x58 LR [c000000000006208] program_check_common+0x108/0x180
On a 64-bit system when the user probes on a 'stdu' instruction, the kernel does not emulate actual store in emulate_step() because it may corrupt the exception frame. So the kernel does the actual store operation in exception return code i.e. resume_kernel().
resume_kernel() loads the saved stack pointer from memory using lwz, which only loads the low 32-bits of the address, causing the kernel crash.
Fix this by loading the 64-bit value instead.
--- arch/powerpc/kernel/entry_64.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/powerpc/kernel/entry_64.S +3 -3
@@ -677,7 +677,7 @@ resume_kernel: addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ - lwz r3,GPR1(r1) + ld r3,GPR1(r1) subi r3,r3,INT_FRAME_SIZE /* dst: Allocate a trampoline exception frame */ mr r4,r1 /* src: current exception frame */ mr r1,r3 /* Reroute the trampoline frame to r1 */
@@ -691,8 +691,8 @@ resume_kernel: addi r6,r6,8 bdnz 2b - /* Do real store operation to complete stwu */ - lwz r5,GPR1(r1) + /* Do real store operation to complete stdu */ + ld r5,GPR1(r1) std r8,0(r5) /* Clear _TIF_EMULATE_STACK_STORE flag */
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/powerpc-kprobe-fix-oops-when-kprobed-on-stdu-instruction.patch