linux/arch/s390/kernel
Linus Torvalds 5336377d62 modules: Fix module_bug_list list corruption race
With all the recent module loading cleanups, we've minimized the code
that sits under module_mutex, fixing various deadlocks and making it
possible to do most of the module loading in parallel.

However, that whole conversion totally missed the rather obscure code
that adds a new module to the list for BUG() handling.  That code was
doubly obscure because (a) the code itself lives in lib/bugs.c (for
dubious reasons) and (b) it gets called from the architecture-specific
"module_finalize()" rather than from generic code.

Calling it from arch-specific code makes no sense what-so-ever to begin
with, and is now actively wrong since that code isn't protected by the
module loading lock any more.

So this commit moves the "module_bug_{finalize,cleanup}()" calls away
from the arch-specific code, and into the generic code - and in the
process protects it with the module_mutex so that the list operations
are now safe.

Future fixups:
 - move the module list handling code into kernel/module.c where it
   belongs.
 - get rid of 'module_bug_list' and just use the regular list of modules
   (called 'modules' - imagine that) that we already create and maintain
   for other reasons.

Reported-and-tested-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Adrian Bunk <bunk@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-10-05 11:29:27 -07:00
..
vdso32 [S390] vdso: use ntp adjusted clock multiplier 2010-04-22 17:17:19 +02:00
vdso64 [S390] vdso: use ntp adjusted clock multiplier 2010-04-22 17:17:19 +02:00
asm-offsets.c [S390] spp: fix compilation for CONFIG_32BIT 2010-05-26 23:26:29 +02:00
audit.c [S390] Get rid of a bunch of sparse warnings again. 2007-10-12 16:13:06 +02:00
audit.h [S390] Get rid of a bunch of sparse warnings again. 2007-10-12 16:13:06 +02:00
base.S [S390] Cleanup struct _lowcore usage and defines. 2010-02-26 22:37:31 +01:00
bitmap.c [S390] move EXPORT_SYMBOLs to definitions 2009-03-26 15:24:11 +01:00
compat_audit.c [S390] Get rid of a bunch of sparse warnings again. 2007-10-12 16:13:06 +02:00
compat_exec_domain.c [S390] Get rid of a lot of sparse warnings. 2007-02-05 21:16:47 +01:00
compat_linux.c Mark arguments to certain syscalls as being const 2010-08-13 16:53:13 -07:00
compat_linux.h Mark arguments to certain syscalls as being const 2010-08-13 16:53:13 -07:00
compat_ptrace.h [S390] Expose a constant for the number of words representing the CRs 2009-03-26 15:24:25 +01:00
compat_signal.c [S390] 64-bit register support for 31-bit processes 2009-10-06 10:35:10 +02:00
compat_wrapper.S [S390] wire up prlimit64 and fanotify* syscalls 2010-08-13 10:06:54 +02:00
cpcmd.c [S390] convert cpcmd printks to pr_xxx macros. 2008-12-25 13:39:19 +01:00
crash.c [S390] Get rid of a lot of sparse warnings. 2007-02-05 21:16:47 +01:00
debug.c [S390] avoid default_llseek in s390 drivers 2010-05-17 10:00:16 +02:00
diag.c [S390] vmur: fix diag14 exceptions with addresses > 2GB. 2007-08-22 13:51:47 +02:00
dis.c [S390] add z9-ec/z10 instruction to kernel disassembler 2010-02-26 22:37:32 +01:00
early.c [S390] virtualization aware cpu measurement 2010-05-17 10:00:15 +02:00
ebcdic.c [S390] Get rid of a lot of sparse warnings. 2007-02-05 21:16:47 +01:00
entry64.S [S390] Fix IRQ tracing in case of PER 2010-07-27 19:29:42 +02:00
entry.h [S390] s390: fix build error (sys_execve) 2010-08-24 09:26:34 +02:00
entry.S [S390] Fix IRQ tracing in case of PER 2010-07-27 19:29:42 +02:00
ftrace.c Merge branch 'tracing-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-02-28 10:17:55 -08:00
head31.S [S390] correct address of _stext with CONFIG_SHARED_KERNEL=y 2010-05-12 09:32:26 +02:00
head64.S [S390] correct address of _stext with CONFIG_SHARED_KERNEL=y 2010-05-12 09:32:26 +02:00
head.S [S390] initrd: change default load address 2010-08-09 18:12:54 +02:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
ipl.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
irq.c [S390] Fix init irq proc build break. 2009-02-11 10:37:39 +01:00
kprobes.c [S390] kprobes: forbid probing of stnsm/stosm/epsw 2010-05-26 23:26:29 +02:00
machine_kexec.c [S390] smp: always reboot on cpu 0 2010-02-26 22:37:30 +01:00
Makefile [S390] add support for compressed kernels 2010-02-26 22:37:33 +01:00
mcount64.S [S390] improve mcount code 2009-09-11 10:29:43 +02:00
mcount.S [S390] improve mcount code 2009-09-11 10:29:43 +02:00
mem_detect.c [S390] s390: hibernation support for s390 2009-06-16 10:31:22 +02:00
module.c modules: Fix module_bug_list list corruption race 2010-10-05 11:29:27 -07:00
nmi.c [S390] idle time accounting vs. machine checks 2010-05-17 10:00:15 +02:00
process.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
processor.c [S390] More cleanup for struct _lowcore 2010-05-17 10:00:15 +02:00
ptrace.c [S390] add breaking event address for user space 2010-05-17 10:00:15 +02:00
reipl64.S [S390] Cleanup struct _lowcore usage and defines. 2010-02-26 22:37:31 +01:00
reipl.S [S390] Cleanup struct _lowcore usage and defines. 2010-02-26 22:37:31 +01:00
relocate_kernel64.S [S390] Reset infrastructure for re-IPL. 2006-12-04 15:40:26 +01:00
relocate_kernel.S [S390] Reset infrastructure for re-IPL. 2006-12-04 15:40:26 +01:00
s390_ext.c [S390] idle time accounting vs. machine checks 2010-05-17 10:00:15 +02:00
s390_ksyms.c [S390] move EXPORT_SYMBOLs to definitions 2009-03-26 15:24:11 +01:00
sclp.S Merge branch 'for-next' into for-linus 2010-03-08 16:55:37 +01:00
setup.c [S390] spp: fix compilation for CONFIG_32BIT 2010-05-26 23:26:29 +02:00
signal.c [S390] add breaking event address for user space 2010-05-17 10:00:15 +02:00
smp.c [S390] fix tlb flushing vs. concurrent /proc accesses 2010-08-24 09:26:34 +02:00
stacktrace.c [S390] Fix stacktrace compile bug. 2008-07-17 17:22:09 +02:00
suspend.c [S390] hibernate: make sure pfn_is_nosave handles lowcore pages 2009-09-22 22:58:45 +02:00
switch_cpu64.S [S390] Cleanup struct _lowcore usage and defines. 2010-02-26 22:37:31 +01:00
switch_cpu.S [S390] Cleanup struct _lowcore usage and defines. 2010-02-26 22:37:31 +01:00
swsusp_asm64.S Merge branch 'for-35' of git://repo.or.cz/linux-kbuild 2010-06-01 08:55:52 -07:00
sys_s390.c [S390] sys_personality: follow u_long to unsigned int conversion 2010-08-13 10:06:54 +02:00
syscalls.S [S390] wire up prlimit64 and fanotify* syscalls 2010-08-13 10:06:54 +02:00
sysinfo.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
time.c Merge branch 'timers-timekeeping-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-08-06 13:18:29 -07:00
topology.c [S390] topology: expose core identifier 2010-05-17 10:00:16 +02:00
traps.c [S390] debug: enable exception-trace debug facility 2010-05-17 10:00:17 +02:00
vdso.c [S390] vdso: remove redundant check for CONFIG_64BIT 2010-05-17 10:00:16 +02:00
vmlinux.lds.S [S390] Enable kmemleak on s390. 2009-10-06 10:35:06 +02:00
vtime.c [S390] idle time accounting vs. machine checks 2010-05-17 10:00:15 +02:00