mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 21:44:06 +08:00
tty: fix leakage of -ERESTARTSYS to userland
Spotted by Satoru Takeuchi. kill_pgrp(task_pgrp(current)) sends the signal to the current's thread group, but can choose any sub-thread as a target for signal_wake_up(). This means that job_control() and tty_check_change() may return -ERESTARTSYS without signal_pending(). Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Cc: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com> Cc: Roland McGrath <roland@redhat.com> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
13466c8419
commit
040b6362d5
@ -1191,6 +1191,7 @@ static int job_control(struct tty_struct *tty, struct file *file)
|
||||
is_current_pgrp_orphaned())
|
||||
return -EIO;
|
||||
kill_pgrp(task_pgrp(current), SIGTTIN, 1);
|
||||
set_thread_flag(TIF_SIGPENDING);
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
}
|
||||
|
@ -1148,7 +1148,8 @@ int tty_check_change(struct tty_struct * tty)
|
||||
return 0;
|
||||
if (is_current_pgrp_orphaned())
|
||||
return -EIO;
|
||||
(void) kill_pgrp(task_pgrp(current), SIGTTOU, 1);
|
||||
kill_pgrp(task_pgrp(current), SIGTTOU, 1);
|
||||
set_thread_flag(TIF_SIGPENDING);
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user