On 03/30, Jann Horn wrote: > > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -3605,16 +3605,11 @@ SYSCALL_DEFINE4(pidfd_send_signal, int, pidfd, int, > sig, > if (unlikely(sig != kinfo.si_signo)) > goto err; > > + /* Only allow sending arbitrary signals to yourself. */ > + ret = -EPERM; > if ((task_pid(current) != pid) && > - (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) { > - /* Only allow sending arbitrary signals to yourself. */ > - ret = -EPERM; > - if (kinfo.si_code != SI_USER) > - goto err; > - > - /* Turn this into a regular kill signal. */ > - prepare_kill_siginfo(sig, &kinfo); > - } > + (kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)) > + goto err;
ACK. but perhaps it should always fail, even if task_pid(current) == pid. sys_rt_sigqueueinfo() allows to send any siginfo to yourself, but this is only needed for checkpoint/restart. Oleg.