mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
signals: send_sigio: use do_send_sig_info() to avoid check_kill_permission()
group_send_sig_info()->check_kill_permission() assumes that current is the sender and uses current_cred(). This is not true in send_sigio_to_task() case. From the security pov the sender is not current, but the task which did fcntl(F_SETOWN), that is why we have sigio_perm() which uses the right creds to check. Fortunately, send_sigio() always sends either SEND_SIG_PRIV or SI_FROMKERNEL() signal, so check_kill_permission() does nothing. But still it would be tidier to avoid this bogus security check and save a couple of cycles. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: stephane eranian <eranian@googlemail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Roland McGrath <roland@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4a30debfb7
commit
06f1631a16
@ -461,11 +461,11 @@ static void send_sigio_to_task(struct task_struct *p,
|
||||
else
|
||||
si.si_band = band_table[reason - POLL_IN];
|
||||
si.si_fd = fd;
|
||||
if (!group_send_sig_info(signum, &si, p))
|
||||
if (!do_send_sig_info(signum, &si, p, true))
|
||||
break;
|
||||
/* fall-through: fall back on the old plain SIGIO signal */
|
||||
case 0:
|
||||
group_send_sig_info(SIGIO, SEND_SIG_PRIV, p);
|
||||
do_send_sig_info(SIGIO, SEND_SIG_PRIV, p, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user