mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
[PATCH] tty: ->signal->tty locking
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)
[[email protected]: 3270 fix]
[[email protected]: various post-viro fixes]
Signed-off-by: Peter Zijlstra <[email protected]>
Acked-by: Alan Cox <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Cc: Prarit Bhargava <[email protected]>
Cc: Chris Wright <[email protected]>
Cc: Roland McGrath <[email protected]>
Cc: Stephen Smalley <[email protected]>
Cc: James Morris <[email protected]>
Cc: "David S. Miller" <[email protected]>
Cc: Jeff Dike <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Jan Kara <[email protected]>
Signed-off-by: Martin Schwidefsky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
562f9c574e
commit
24ec839c43
12 changed files with 186 additions and 132 deletions
|
|
@ -428,6 +428,7 @@ static void do_acct_process(struct file *file)
|
|||
u64 elapsed;
|
||||
u64 run_time;
|
||||
struct timespec uptime;
|
||||
struct tty_struct *tty;
|
||||
|
||||
/*
|
||||
* First check to see if there is enough free_space to continue
|
||||
|
|
@ -485,12 +486,8 @@ static void do_acct_process(struct file *file)
|
|||
#endif
|
||||
|
||||
mutex_lock(&tty_mutex);
|
||||
/* FIXME: Whoever is responsible for current->signal locking needs
|
||||
to use the same locking all over the kernel and document it */
|
||||
read_lock(&tasklist_lock);
|
||||
ac.ac_tty = current->signal->tty ?
|
||||
old_encode_dev(tty_devnum(current->signal->tty)) : 0;
|
||||
read_unlock(&tasklist_lock);
|
||||
tty = get_current_tty();
|
||||
ac.ac_tty = tty ? old_encode_dev(tty_devnum(tty)) : 0;
|
||||
mutex_unlock(&tty_mutex);
|
||||
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue