• Steffen Rumler's avatar
    powerpc: Fix kernel panic during kernel module load · 3c752965
    Steffen Rumler authored
    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.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarSteffen Rumler <steffen.rumler.ext@nsn.com>
    [paulus@samba.org: reworded the description]
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    3c752965
module_32.c 8.65 KB