summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorSteffen Rumler <steffen.rumler.ext@nsn.com>2012-06-06 16:37:17 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-06-17 11:21:22 -0700
commite6e70e4c7ef345d3af2d2ba98c2d2f175aa64c2a (patch)
treee13ab281fd995e40de3f66508ba95e6cec6826a7 /init
parente6a6c7d2e51c9af9ce9fab247b1bc2af3967cfbb (diff)
powerpc: Fix kernel panic during kernel module load
commit 3c75296562f43e6fbc6cddd3de948a7b3e4e9bcf upstream. This fixes a problem which can causes kernel oopses while loading a kernel module. According to the PowerPC EABI specification, GPR r11 is assigned the dedicated function to point to the previous stack frame. In the powerpc-specific kernel module loader, do_plt_call() (in arch/powerpc/kernel/module_32.c), GPR r11 is also used to generate trampoline code. This combination crashes the kernel, in the case where the compiler chooses to use a helper function for saving GPRs on entry, and the module loader has placed the .init.text section far away from the .text section, meaning that it has to generate a trampoline for functions in the .init.text section to call the GPR save helper. Because the trampoline trashes r11, references to the stack frame using r11 can cause an oops. The fix just uses GPR r12 instead of GPR r11 for generating the trampoline code. According to the statements from Freescale, this is safe from an EABI perspective. I've tested the fix for kernel 2.6.33 on MPC8541. Signed-off-by: Steffen Rumler <steffen.rumler.ext@nsn.com> [paulus@samba.org: reworded the description] Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions