Skip to content

Commit a816fd6

Browse files
committed
Merge tag 'pidfd-fixes-v5.1-rc3' of gitolite.kernel.org:pub/scm/linux/kernel/git/brauner/linux
Pull pidfd fix from Christian Brauner: "This should be an uncontroversial fix for pidfd_send_signal() by Jann to better align it's behavior with other signal sending functions: In one of the early versions of the patchset it was suggested to not unconditionally error out when a signal with SI_USER is sent to a non-current task (cf. [1]). Instead, pidfd_send_signal() currently silently changes this to a regular kill signal. While this is technically fine, the semantics are weird since the kernel just silently converts a user's request behind their back and also no other signal sending function allows to do this. It gets more hairy when we introduce sending signals to a specific thread soon. So let's align pidfd_send_signal() with all the other signal sending functions and error out when SI_USER signals are sent to a non-current task" * tag 'pidfd-fixes-v5.1-rc3' of gitolite.kernel.org:pub/scm/linux/kernel/git/brauner/linux: signal: don't silently convert SI_USER signals to non-current pidfd
2 parents 4a3164e + 556a888 commit a816fd6

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

kernel/signal.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3605,16 +3605,11 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, sig,
36053605
if (unlikely(sig != kinfo.si_signo))
36063606
goto err;
36073607

3608+
/* Only allow sending arbitrary signals to yourself. */
3609+
ret = -EPERM;
36083610
if ((task_pid(current) != pid) &&
3609-
(kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) {
3610-
/* Only allow sending arbitrary signals to yourself. */
3611-
ret = -EPERM;
3612-
if (kinfo.si_code != SI_USER)
3613-
goto err;
3614-
3615-
/* Turn this into a regular kill signal. */
3616-
prepare_kill_siginfo(sig, &kinfo);
3617-
}
3611+
(kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL))
3612+
goto err;
36183613
} else {
36193614
prepare_kill_siginfo(sig, &kinfo);
36203615
}

0 commit comments

Comments
 (0)