Oleg Nesterov
60187d2708
sigqueue_free: fix the race with collect_signal()
...
Spotted by taoyue <yue.tao@windriver.com> and Jeremy Katz <jeremy.katz@windriver.com>.
collect_signal: sigqueue_free:
list_del_init(&first->list);
if (!list_empty(&q->list)) {
// not taken
}
q->flags &= ~SIGQUEUE_PREALLOC;
__sigqueue_free(first); __sigqueue_free(q);
Now, __sigqueue_free() is called twice on the same "struct sigqueue" with the
obviously bad implications.
In particular, this double free breaks the array_cache->avail logic, so the
same sigqueue could be "allocated" twice, and the bug can manifest itself via
the "impossible" BUG_ON(!SIGQUEUE_PREALLOC) in sigqueue_free/send_sigqueue.
Hopefully this can explain these mysterious bug-reports, see
http://marc.info/?t=118766926500003
http://marc.info/?t=118466273000005
Alexey Dobriyan reports this patch makes the difference for the testcase, but
nobody has an access to the application which opened the problems originally.
Also, this patch removes tasklist lock/unlock, ->siglock is enough.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: taoyue <yue.tao@windriver.com>
Cc: Jeremy Katz <jeremy.katz@windriver.com>
Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Cc: Alexey Dobriyan <adobriyan@sw.ru>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Roland McGrath <roland@redhat.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-08-31 01:42:23 -07:00
..
irq
request_irq: fix DEBUG_SHIRQ handling
2007-08-31 01:42:23 -07:00
power
PM: Fix dependencies of CONFIG_SUSPEND and CONFIG_HIBERNATION
2007-08-31 01:42:22 -07:00
time
timer: remove clockevents_unregister_notifier
2007-08-11 15:47:42 -07:00
.gitignore
acct.c
Cleanup non-arch xtime uses, use get_seconds() or current_kernel_time().
2007-07-25 10:09:20 -07:00
audit.c
Freezer: make kernel threads nonfreezable by default
2007-07-17 10:23:02 -07:00
audit.h
auditfilter.c
[PATCH] allow audit filtering on bit & operations
2007-07-22 09:57:02 -04:00
auditsc.c
kernel/auditsc.c: fix an off-by-one
2007-08-22 19:52:44 -07:00
capability.c
compat.c
configs.c
cpu.c
PM: Fix dependencies of CONFIG_SUSPEND and CONFIG_HIBERNATION
2007-08-31 01:42:22 -07:00
cpuset.c
usermodehelper: Tidy up waiting
2007-07-18 08:47:40 -07:00
delayacct.c
die_notifier.c
dma.c
exec_domain.c
exit.c
Assign task_struct.exit_code before taskstats_exit()
2007-08-31 01:42:22 -07:00
extable.c
fork.c
mm: Remove slab destructors from kmem_cache_create().
2007-07-20 10:11:58 +09:00
futex.c
futex_unlock_pi() hurts my brain and may cause application deadlock
2007-08-22 19:52:44 -07:00
futex_compat.c
hrtimer.c
Cache xtime every call to update_wall_time
2007-07-25 10:17:44 -07:00
itimer.c
kallsyms.c
kallsyms: make KSYM_NAME_LEN include space for trailing '\0'
2007-07-17 10:23:03 -07:00
Kconfig.hz
Kconfig.preempt
[PATCH] sched: arch preempt notifier mechanism
2007-07-26 13:40:43 +02:00
kexec.c
kfifo.c
is_power_of_2: kernel/kfifo.c
2007-07-16 09:05:50 -07:00
kmod.c
kernel-doc fix for kmod.c
2007-07-26 11:33:06 -07:00
kprobes.c
fix compilation with gcc 4.2
2007-08-11 15:47:42 -07:00
ksysfs.c
FRV: Fix linkage problems
2007-07-20 12:01:34 -07:00
kthread.c
kthread: silence bogus section mismatch warning
2007-07-31 15:39:42 -07:00
latency.c
lockdep.c
lockdep debugging: give stacktrace for init_error
2007-07-19 10:04:49 -07:00
lockdep_internals.h
lockdep_proc.c
Fix leak on /proc/lockdep_stats
2007-07-31 15:39:40 -07:00
Makefile
module.c
Fix Off-by-one in /sys/module/*/refcnt
2007-08-22 14:35:35 -07:00
mutex-debug.c
mutex-debug.h
mutex.c
lockstat: measure lock bouncing
2007-07-19 10:04:49 -07:00
mutex.h
nsproxy.c
mm: Remove slab destructors from kmem_cache_create().
2007-07-20 10:11:58 +09:00
panic.c
Report that kernel is tainted if there was an OOPS
2007-07-17 10:23:02 -07:00
params.c
modules: better error messages when modules fail to load due to a sysfs problem.
2007-07-30 14:25:23 -07:00
pid.c
posix-cpu-timers.c
posix-timers.c
posix-timers: fix creation race
2007-08-22 19:52:46 -07:00
printk.c
fix - ensure we don't use bootconsoles after init has been released
2007-08-21 20:23:53 -07:00
profile.c
fix compilation with gcc 4.2
2007-08-11 15:47:42 -07:00
ptrace.c
coredump masking: reimplementation of dumpable using two flags
2007-07-19 10:04:46 -07:00
rcupdate.c
rcutorture.c
Freezer: make kernel threads nonfreezable by default
2007-07-17 10:23:02 -07:00
relay.c
Fix a use after free bug in kernel->userspace relay file support
2007-07-31 15:39:42 -07:00
resource.c
rtmutex-debug.c
FUTEX: Tidy up the code
2007-07-16 09:05:49 -07:00
rtmutex-debug.h
rtmutex-tester.c
Freezer: make kernel threads nonfreezable by default
2007-07-17 10:23:02 -07:00
rtmutex.c
FUTEX: Tidy up the code
2007-07-16 09:05:49 -07:00
rtmutex.h
rtmutex_common.h
FUTEX: Tidy up the code
2007-07-16 09:05:49 -07:00
rwsem.c
lockstat: hook into spinlock_t, rwlock_t, rwsem and mutex
2007-07-19 10:04:49 -07:00
sched.c
sched: s/sched_latency/sched_min_granularity
2007-08-25 22:17:19 +02:00
sched_debug.c
sched: sched_clock_idle_[sleep|wakeup]_event()
2007-08-23 15:18:02 +02:00
sched_fair.c
sched: cleanup, sched_granularity -> sched_min_granularity
2007-08-25 18:41:53 +02:00
sched_idletask.c
sched: remove the 'u64 now' parameter from ->put_prev_task()
2007-08-09 11:16:49 +02:00
sched_rt.c
sched: optimize task_tick_rt() a bit
2007-08-24 20:39:10 +02:00
sched_stats.h
[PATCH] sched: add schedstat_set() API
2007-08-02 17:41:40 +02:00
seccomp.c
make seccomp zerocost in schedule
2007-07-16 09:05:50 -07:00
signal.c
sigqueue_free: fix the race with collect_signal()
2007-08-31 01:42:23 -07:00
softirq.c
Freezer: make kernel threads nonfreezable by default
2007-07-17 10:23:02 -07:00
softlockup.c
Freezer: make kernel threads nonfreezable by default
2007-07-17 10:23:02 -07:00
spinlock.c
lockstat: hook into spinlock_t, rwlock_t, rwsem and mutex
2007-07-19 10:04:49 -07:00
srcu.c
stacktrace.c
stop_machine.c
sys.c
setpgid(child) fails if the child was forked by sub-thread
2007-08-31 01:42:22 -07:00
sys_ni.c
sysctl.c
sched: cleanup, sched_granularity -> sched_min_granularity
2007-08-25 18:41:53 +02:00
taskstats.c
time.c
Cleanup non-arch xtime uses, use get_seconds() or current_kernel_time().
2007-07-25 10:09:20 -07:00
timer.c
Pull ia64-clocksource into release branch
2007-07-20 11:26:47 -07:00
tsacct.c
Cleanup non-arch xtime uses, use get_seconds() or current_kernel_time().
2007-07-25 10:09:20 -07:00
uid16.c
user.c
mm: Remove slab destructors from kmem_cache_create().
2007-07-20 10:11:58 +09:00
user_namespace.c
userns: don't leak root user
2007-08-31 01:42:23 -07:00
utsname.c
utsname_sysctl.c
wait.c
workqueue.c
fix bogus hotplug cpu warning
2007-08-27 10:27:48 -07:00