mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -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
|
|
@ -39,12 +39,13 @@ static long execve1(char *file, char __user * __user *argv,
|
|||
char __user *__user *env)
|
||||
{
|
||||
long error;
|
||||
struct tty_struct *tty;
|
||||
|
||||
#ifdef CONFIG_TTY_LOG
|
||||
mutex_lock(&tty_mutex);
|
||||
task_lock(current); /* FIXME: is this needed ? */
|
||||
log_exec(argv, current->signal->tty);
|
||||
task_unlock(current);
|
||||
tty = get_current_tty();
|
||||
if (tty)
|
||||
log_exec(argv, tty);
|
||||
mutex_unlock(&tty_mutex);
|
||||
#endif
|
||||
error = do_execve(file, argv, env, ¤t->thread.regs);
|
||||
|
|
|
|||
Loading…
Reference in a new issue