kernel-ark/kernel
Oleg Nesterov 6b3934ef52 [PATCH] copy_process: cleanup bad_fork_cleanup_signal
__exit_signal() does important cleanups atomically under ->siglock.  It is
also called from copy_process's error path.  This is not good, for example we
can't move __unhash_process() under ->siglock for that reason.

We should not mix these 2 paths, just look at ugly 'if (p->sighand)' under
'bad_fork_cleanup_sighand:' label.  For copy_process() case it is sufficient
to just backout copy_signal(), nothing more.

Again, nobody can see this task yet.  For CLONE_THREAD case we just decrement
signal->count, otherwise nobody can see this ->signal and we can free it
lockless.

This patch assumes it is safe to do exit_thread_group_keys() without
tasklist_lock.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-03-28 18:36:42 -08:00
..
irq [PATCH] warn if free_irq() is called from IRQ context 2006-03-26 08:56:53 -08:00
power [PATCH] swswsup: return correct load_image error 2006-03-26 08:56:55 -08:00
.gitignore
acct.c
audit.c
audit.h
auditfilter.c
auditsc.c Merge branch 'audit.b3' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/audit-current 2006-03-25 09:24:53 -08:00
capability.c [PATCH] refactor capable() to one implementation, add __capable() helper 2006-03-25 08:22:56 -08:00
compat.c [PATCH] lightweight robust futexes: compat 2006-03-27 08:44:49 -08:00
configs.c
cpu.c [PATCH] Notifier chain update: API changes 2006-03-27 08:44:50 -08:00
cpuset.c
dma.c
exec_domain.c
exit.c [PATCH] release_task: replace open-coded ptrace_unlink() 2006-03-28 18:36:41 -08:00
extable.c
fork.c [PATCH] copy_process: cleanup bad_fork_cleanup_signal 2006-03-28 18:36:42 -08:00
futex_compat.c [PATCH] compat_sys_futex() warning fix 2006-03-28 09:16:09 -08:00
futex.c [PATCH] lightweight robust futexes updates 2006-03-27 08:44:49 -08:00
hrtimer.c [PATCH] hrtimers: remove data field 2006-03-26 08:57:03 -08:00
intermodule.c
itimer.c [PATCH] hrtimers: remove data field 2006-03-26 08:57:03 -08:00
kallsyms.c
Kconfig.hz
Kconfig.preempt
kexec.c
kfifo.c
kmod.c [PATCH] wait_for_helper: trivial style cleanup 2006-03-28 18:36:41 -08:00
kprobes.c [PATCH] kretprobe instance recycled by parent process 2006-03-26 08:57:04 -08:00
ksysfs.c
kthread.c [PATCH] find_task_by_pid() needs tasklist_lock 2006-03-25 08:22:57 -08:00
Makefile [PATCH] lightweight robust futexes: compat 2006-03-27 08:44:49 -08:00
module.c [PATCH] symversion warning fix 2006-03-28 09:16:02 -08:00
mutex-debug.c
mutex-debug.h
mutex.c
mutex.h
panic.c [PATCH] Notifier chain update: API changes 2006-03-27 08:44:50 -08:00
params.c [PATCH] Change dash2underscore() return value to char 2006-03-28 09:16:03 -08:00
pid.c [PATCH] pidhash: don't count idle threads 2006-03-28 18:36:41 -08:00
posix-cpu-timers.c
posix-timers.c [PATCH] hrtimers: remove data field 2006-03-26 08:57:03 -08:00
printk.c
profile.c [PATCH] Notifier chain update: API changes 2006-03-27 08:44:50 -08:00
ptrace.c [PATCH] don't use REMOVE_LINKS/SET_LINKS for reparenting 2006-03-28 18:36:41 -08:00
rcupdate.c
rcutorture.c [PATCH] for_each_possible_cpu: fixes for generic part 2006-03-28 09:16:05 -08:00
relay.c
resource.c
sched.c [PATCH] for_each_possible_cpu: fixes for generic part 2006-03-28 09:16:05 -08:00
seccomp.c
signal.c [PATCH] copy_process: cleanup bad_fork_cleanup_signal 2006-03-28 18:36:42 -08:00
softirq.c
softlockup.c [PATCH] Notifier chain update: API changes 2006-03-27 08:44:50 -08:00
spinlock.c
stop_machine.c
sys_ni.c [PATCH] lightweight robust futexes: core 2006-03-27 08:44:49 -08:00
sys.c [PATCH] Notifier chain update: API changes 2006-03-27 08:44:50 -08:00
sysctl.c
time.c [PATCH] hrtimers: remove nsec_t typedef 2006-03-26 08:57:03 -08:00
timer.c [PATCH] remove pps support 2006-03-25 08:23:02 -08:00
uid16.c
user.c
wait.c
workqueue.c