linux/arch/powerpc/kernel
Steffen Rumler 3c75296562 powerpc: Fix kernel panic during kernel module load
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: Steffen Rumler <steffen.rumler.ext@nsn.com>
[paulus@samba.org: reworded the description]
Signed-off-by: Paul Mackerras <paulus@samba.org>
2012-06-08 19:59:08 +10:00
..
vdso32 Fix common misspellings 2011-03-31 11:26:23 -03:00
vdso64 Fix common misspellings 2011-03-31 11:26:23 -03:00
.gitignore
align.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
asm-offsets.c Merge branch 'next' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2012-05-24 16:17:30 -07:00
audit.c
btext.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
cacheinfo.c cpu: convert 'cpu' and 'machinecheck' sysdev_class to a regular subsystem 2011-12-21 14:29:42 -08:00
cacheinfo.h
clock.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
compat_audit.c
cpu_setup_6xx.S powerpc: Fix some 6xx/7xxx CPU setup functions 2011-02-07 12:57:11 +11:00
cpu_setup_44x.S
cpu_setup_a2.S powerpc/book3e: Add ICSWX/ACOP support to Book3e cores like A2 2011-11-25 14:11:28 +11:00
cpu_setup_fsl_booke.S KVM: PPC: e500mc support 2012-04-08 12:54:33 +03:00
cpu_setup_pa6t.S
cpu_setup_power7.S powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture bits 2011-07-12 13:16:58 +03:00
cpu_setup_ppc970.S powerpc, KVM: Split HVMODE_206 cpu feature bit into separate HV and architecture bits 2011-07-12 13:16:58 +03:00
cputable.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
crash_dump.c powerpc: Rename mapping based RELOCATABLE to DYNAMIC_MEMSTART for BookE 2011-12-20 10:20:19 -05:00
crash.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
dbell.c powerpc: Rework lazy-interrupt handling 2012-03-09 13:25:06 +11:00
dma-iommu.c PowerPC: adapt for dma_map_ops changes 2012-03-28 16:36:33 +02:00
dma-swiotlb.c PowerPC: adapt for dma_map_ops changes 2012-03-28 16:36:33 +02:00
dma.c PowerPC: adapt for dma_map_ops changes 2012-03-28 16:36:33 +02:00
entry_32.S powerpc: Fix page fault with lockdep regression 2012-04-10 17:21:35 +10:00
entry_64.S Merge branch 'merge' into next 2012-05-14 10:19:22 +10:00
exceptions-64e.S powerpc: Rework lazy-interrupt handling 2012-03-09 13:25:06 +11:00
exceptions-64s.S Merge branch 'next' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2012-05-24 16:17:30 -07:00
fadump.c powerpc: Fix fallout from system.h split up 2012-04-02 14:00:03 +10:00
firmware.c powerpc: fix implicit use of cache.h in kernel/firmware.c 2011-10-31 19:30:41 -04:00
fpu.S powerpc: Remove second definition of STACK_FRAME_OVERHEAD 2010-11-29 15:48:23 +11:00
fsl_booke_entry_mapping.S
ftrace.c powerpc/ftrace: Implement raw syscall tracepoints on PowerPC 2011-05-26 13:38:57 +10:00
head_8xx.S powerpc: Call do_page_fault() with interrupts off 2012-03-09 10:55:08 +11:00
head_32.S powerpc: Call do_page_fault() with interrupts off 2012-03-09 10:55:08 +11:00
head_40x.S powerpc: Call do_page_fault() with interrupts off 2012-03-09 10:55:08 +11:00
head_44x.S Merge branch 'next' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2012-05-24 16:17:30 -07:00
head_64.S powerpc: Rework lazy-interrupt handling 2012-03-09 13:25:06 +11:00
head_booke.h KVM: PPC: booke: category E.HV (GS-mode) support 2012-04-08 12:51:19 +03:00
head_fsl_booke.S Merge branch 'next' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2012-05-24 16:17:30 -07:00
hw_breakpoint.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
ibmebus.c Merge branch 'for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping 2012-04-04 17:13:43 -07:00
idle_6xx.S
idle_book3e.S powerpc: Rework lazy-interrupt handling 2012-03-09 13:25:06 +11:00
idle_e500.S powerpc: e500mc: Fix: use CONFIG_PPC_E500MC in idle_e500.S 2011-10-11 23:23:24 -05:00
idle_power4.S powerpc: Fix power4/970 idle code regression with lockdep 2012-03-16 09:28:17 +11:00
idle_power7.S KVM: PPC: Book3S HV: Make secondary threads more robust against stray IPIs 2012-04-08 14:01:20 +03:00
idle.c powerpc: Remove unused cpu_idle_wait() 2012-05-08 12:35:07 +02:00
io-workarounds.c powerpc: io-workarounds.c was implicitly getting init_mm 2011-10-31 19:30:37 -04:00
io.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
iomap.c powerpc: switch to GENERIC_PCI_IOMAP 2011-11-28 21:13:18 +02:00
iommu.c fadump: Register for firmware assisted dump. 2012-02-23 10:50:01 +11:00
irq.c powerpc: Fix irq distribution 2012-05-22 14:38:26 +10:00
isa-bridge.c powerpc: Remove FW_FEATURE ISERIES from arch code 2012-03-21 11:16:11 +11:00
jump_label.c powerpc: Fix build breakage in jump_label.c 2011-11-16 14:25:19 +11:00
kgdb.c powerpc: Fix fallout from system.h split up 2012-04-02 14:00:03 +10:00
kprobes.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
kvm_emul.S KVM: PPC: Avoid patching paravirt template code 2012-03-05 14:52:34 +02:00
kvm.c KVM: PPC: Avoid patching paravirt template code 2012-03-05 14:52:34 +02:00
l2cr_6xx.S Fix common misspellings 2011-03-31 11:26:23 -03:00
legacy_serial.c powerpc: Fix build on some non-freescale platforms 2012-01-25 13:33:22 +11:00
lparcfg.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
machine_kexec_32.c treewide: convert uses of ATTRIB_NORETURN to __noreturn 2012-01-12 20:13:03 -08:00
machine_kexec_64.c treewide: convert uses of ATTRIB_NORETURN to __noreturn 2012-01-12 20:13:03 -08:00
machine_kexec.c powerpc/irqdomain: Fix broken NR_IRQ references 2012-04-30 10:45:26 +10:00
Makefile powerpc: Use generic init_task 2012-05-05 13:00:25 +02:00
misc_32.S powerpc/47x: Kernel support for KEXEC 2012-05-03 08:40:23 -04:00
misc_64.S powerpc/maple: Enable scom access functions on Maple 2011-06-29 17:48:20 +10:00
misc.S powerpc: Remove legacy iSeries bits from assembly files 2012-03-09 10:54:59 +11:00
module_32.c powerpc: Fix kernel panic during kernel module load 2012-06-08 19:59:08 +10:00
module_64.c modules: make arch's use default loader hooks 2011-07-24 22:06:04 +09:30
module.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
msi.c
nvram_64.c powerpc/nvram: Generalize code for OS partitions in NVRAM 2011-03-04 18:19:04 +11:00
of_platform.c powerpc/eeh: Introduce EEH device 2012-03-09 11:39:29 +11:00
paca.c powerpc: Remove iseries specific fields in lppaca 2012-04-30 15:37:16 +10:00
pci_32.c powerpc/PCI: compute I/O space bus-to-resource offset consistently 2012-03-20 10:41:44 -07:00
pci_64.c powerpc/PCI: compute I/O space bus-to-resource offset consistently 2012-03-20 10:41:44 -07:00
pci_dn.c powerpc/powernv: PCI support for p7IOC under OPAL v2 2011-11-25 14:53:15 +11:00
pci_of_scan.c powerpc/PCI: convert devtree bus addresses to resource 2012-03-20 10:41:51 -07:00
pci-common.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-03-23 14:02:12 -07:00
pmc.c bug.h: add include of it to various implicit C users 2012-02-29 17:15:08 -05:00
ppc32.h
ppc_ksyms.c powerpc: Use the new generic strncpy_from_user() and strnlen_user() 2012-05-27 21:00:07 -07:00
ppc_save_regs.S Fix common misspellings 2011-03-31 11:26:23 -03:00
proc_powerpc.c
process.c Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-05-23 10:59:07 -07:00
prom_init_check.sh powerpc/powernv: Get kernel command line accross OPAL takeover 2011-09-20 16:09:48 +10:00
prom_init.c powerpc/crypto: Enable the PFO-based encryption device 2012-05-16 15:05:46 +10:00
prom_parse.c powerpc: remove non-required uses of include <linux/module.h> 2011-10-31 19:30:44 -04:00
prom.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
ptrace32.c powerpc: Remove old powerpc specific ptrace getregs/setregs calls 2012-04-30 15:37:28 +10:00
ptrace.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc 2012-05-23 09:02:42 -07:00
reloc_32.S powerpc: Process dynamic relocations for kernel 2011-12-20 10:21:08 -05:00
reloc_64.S
rtas_flash.c powerpc/pseries: Cancel RTAS event scan before firmware flash 2011-11-25 14:11:29 +11:00
rtas_pci.c Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci 2012-03-23 14:02:12 -07:00
rtas-proc.c
rtas-rtc.c powerpc/rtas-rtc: remove sideeffects of printk_ratelimit 2011-06-29 15:30:43 +10:00
rtas.c Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
rtasd.c powerpc/pseries: Cancel RTAS event scan before firmware flash 2011-11-25 14:11:29 +11:00
setup_32.c powerpc: fix build when CONFIG_BOOKE_WDT is enabled 2012-04-19 14:55:43 -05:00
setup_64.c Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
setup-common.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
setup.h
signal_32.c powerpc: get rid of restore_sigmask() 2012-06-01 12:58:51 -04:00
signal_64.c powerpc: get rid of restore_sigmask() 2012-06-01 12:58:51 -04:00
signal.c new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
signal.h powerpc: get rid of restore_sigmask() 2012-06-01 12:58:51 -04:00
smp-tbsync.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
smp.c powerpc: Use generic idle thread allocation 2012-04-26 12:06:10 +02:00
softemu8xx.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
stacktrace.c powerpc: various straight conversions from module.h --> export.h 2011-10-31 19:30:44 -04:00
suspend.c
swsusp_32.S Fix common misspellings 2011-03-31 11:26:23 -03:00
swsusp_64.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
swsusp_asm64.S
swsusp_booke.S
swsusp.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
sys_ppc32.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
syscalls.c
sysfs.c Disintegrate asm/system.h for PowerPC 2012-03-28 18:30:02 +01:00
systbl_chk.c
systbl_chk.sh
systbl.S
tau_6xx.c
time.c powerpc/time: Sanity check of decrementer expiration is necessary 2012-06-08 14:07:35 +10:00
traps.c powerpc/irq: Make alignment & program interrupt behave the same 2012-05-09 09:42:33 +10:00
udbg_16550.c powerpc: Add early debug for WSP platforms 2011-05-06 13:32:41 +10:00
udbg.c powerpc: Random little legacy iSeries removal tidy ups 2012-03-28 11:33:23 +11:00
vdso.c Disintegrate and delete asm/system.h 2012-03-28 15:58:21 -07:00
vecemu.c
vector.S powerpc: Optimise enable_kernel_altivec 2012-04-30 15:37:17 +10:00
vio.c powerpc/pseries: Add PFO support to the VIO bus 2012-05-14 10:49:09 +10:00
vmlinux.lds.S powerpc: Remove legacy iSeries bits from assembly files 2012-03-09 10:54:59 +11:00