mirror of
https://github.com/torvalds/linux.git
synced 2025-11-11 22:19:23 +02:00
Fix the locking of signal->tty.
Use ->sighand->siglock to protect ->signal->tty; this lock is already used
by most other members of ->signal/->sighand. And unless we are 'current'
or the tasklist_lock is held we need ->siglock to access ->signal anyway.
(NOTE: sys_unshare() is broken wrt ->sighand locking rules)
Note that tty_mutex is held over tty destruction, so while holding
tty_mutex any tty pointer remains valid. Otherwise the lifetime of ttys
are governed by their open file handles. This leaves some holes for tty
access from signal->tty (or any other non file related tty access).
It solves the tty SLAB scribbles we were seeing.
(NOTE: the change from group_send_sig_info to __group_send_sig_info needs to
be examined by someone familiar with the security framework, I think
it is safe given the SEND_SIG_PRIV from other __group_send_sig_info
invocations)
[schwidefsky@de.ibm.com: 3270 fix]
[akpm@osdl.org: various post-viro fixes]
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Acked-by: Alan Cox <alan@redhat.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Chris Wright <chrisw@sous-sol.org>
Cc: Roland McGrath <roland@redhat.com>
Cc: Stephen Smalley <sds@tycho.nsa.gov>
Cc: James Morris <jmorris@namei.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Jan Kara <jack@ucw.cz>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
|
||
|---|---|---|
| .. | ||
| skas | ||
| tt | ||
| asm-offsets.c | ||
| config.c.in | ||
| dyn.lds.S | ||
| exec.c | ||
| exitcode.c | ||
| gmon_syms.c | ||
| gprof_syms.c | ||
| init_task.c | ||
| initrd.c | ||
| irq.c | ||
| ksyms.c | ||
| Makefile | ||
| mem.c | ||
| physmem.c | ||
| process.c | ||
| ptrace.c | ||
| reboot.c | ||
| resource.c | ||
| sigio.c | ||
| signal.c | ||
| smp.c | ||
| syscall.c | ||
| sysrq.c | ||
| time.c | ||
| tlb.c | ||
| trap.c | ||
| uaccess.c | ||
| um_arch.c | ||
| umid.c | ||
| uml.lds.S | ||
| vmlinux.lds.S | ||