linux/kernel
Trent Piepho 5e37661389 [PATCH] symbol_put_addr() locks kernel
Even since a previous patch:

Fix race between CONFIG_DEBUG_SLABALLOC and modules
Sun, 27 Jun 2004 17:55:19 +0000 (17:55 +0000)
http://www.kernel.org/git/?p=linux/kernel/git/torvalds/old-2.6-bkcvs.git;a=commit;h=92b3db26d31cf21b70e3c1eadc56c179506d8fbe

The function symbol_put_addr() will deadlock the kernel.

symbol_put_addr() would acquire modlist_lock, then while holding the lock call
two functions kernel_text_address() and module_text_address() which also try
to acquire the same lock.  This deadlocks the kernel of course.

This patch changes symbol_put_addr() to not acquire the modlist_lock, it
doesn't need it since it never looks at the module list directly.  Also, it
now uses core_kernel_text() instead of kernel_text_address().  The latter has
an additional check for addr inside a module, but we don't need to do that
since we call module_text_address() (the same function kernel_text_address
uses) ourselves.

Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Cc: Zwane Mwaikambo <zwane@fsmlabs.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Cc: Johannes Stezenbach <js@linuxtv.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-05-15 11:20:55 -07:00
..
irq [PATCH] request_irq(): remove warnings from irq probing 2006-04-28 08:33:46 -07:00
power [PATCH] off-by-1 in kernel/power/main.c 2006-04-28 08:33:46 -07:00
.gitignore
acct.c
audit.c [PATCH] More user space subject labels 2006-05-01 06:10:01 -04:00
audit.h [PATCH] support for context based audit filtering, part 2 2006-05-01 06:09:36 -04:00
auditfilter.c [PATCH] More user space subject labels 2006-05-01 06:10:01 -04:00
auditsc.c [PATCH] Audit Filter Performance 2006-05-01 06:10:07 -04:00
capability.c
compat.c
configs.c
cpu.c
cpuset.c
dma.c
exec_domain.c
exit.c [PATCH] move call of audit_free() into do_exit() 2006-05-01 06:06:13 -04:00
extable.c [PATCH] symbol_put_addr() locks kernel 2006-05-15 11:20:55 -07:00
fork.c [PATCH] move call of audit_free() into do_exit() 2006-05-01 06:06:13 -04:00
futex_compat.c
futex.c
hrtimer.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00
intermodule.c
itimer.c
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c
kfifo.c
kmod.c
kprobes.c
ksysfs.c
kthread.c
Makefile
module.c [PATCH] symbol_put_addr() locks kernel 2006-05-15 11:20:55 -07:00
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
panic.c
params.c
pid.c
posix-cpu-timers.c
posix-timers.c
printk.c
profile.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00
ptrace.c ptrace_attach: fix possible deadlock schenario with irqs 2006-05-11 11:08:49 -07:00
rcupdate.c [PATCH] RCU: introduce rcu_needs_cpu() interface 2006-05-15 11:20:55 -07:00
rcutorture.c
relay.c
resource.c
sched.c
seccomp.c
signal.c
softirq.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00
softlockup.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00
spinlock.c
stop_machine.c
sys_ni.c
sys.c
sysctl.c
time.c
timer.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00
uid16.c
user.c
wait.c
workqueue.c [PATCH] Remove __devinit and __cpuinit from notifier_call definitions 2006-04-26 08:30:03 -07:00