linux-stable/arch/h8300/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
..
timer fix typos concerning "initiali[zs]e" 2010-06-16 18:05:05 +02:00
asm-offsets.c ptrace: remove PT_DTRACE from arch/h8300 2009-06-18 13:03:48 -07:00
entry.S h8300 entry.S update 2007-07-16 09:05:37 -07:00
gpio.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
h8300_ksyms.c Generic semaphore implementation 2008-04-17 10:42:34 -04:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
irq.c genirq: Convert irq_desc.lock to raw_spinlock 2009-12-14 23:55:33 +01:00
Makefile h8300: update timer handler - misc update 2008-10-16 11:21:29 -07:00
module.c modules: Fix module_bug_list list corruption race 2010-10-05 11:29:27 -07:00
process.c Make do_execve() take a const filename pointer 2010-08-17 18:07:43 -07:00
ptrace.c h8300: use generic ptrace_resume code 2010-03-12 15:52:38 -08:00
setup.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
signal.c KEYS: Add missing linux/tracehook.h #inclusions 2009-09-09 18:30:02 +10:00
sys_h8300.c h8300: Fix missing consts in kernel_execve() 2010-09-07 13:52:28 -07:00
syscalls.S Add generic sys_old_mmap() 2010-03-12 15:52:32 -08:00
time.c h8300: Convert h8300 to use read/update_persistent_clock 2010-03-13 01:14:10 +01:00
traps.c h8300: Fix die() 2010-09-07 13:52:28 -07:00
vmlinux.lds.S module: make MODULE_SYMBOL_PREFIX into a CONFIG option 2009-12-15 16:28:26 +10:30