On Wed, Feb 14, 2024 at 01:36:56PM +0100, Oleg Nesterov wrote:
On 02/10, Oleg Nesterov wrote:
quoted
On 02/10, Christian Brauner wrote:
quoted
+ if (type == PIDFD_SIGNAL_PROCESS_GROUP)
+ ret = kill_pgrp_info(sig, &kinfo, pid);
I guess you meant
if (type == PIDTYPE_PGID)
other than that,
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Yes, but there is another thing I hadn't thought of...
sys_pidfd_send_signal() does
/* Only allow sending arbitrary signals to yourself. */
ret = -EPERM;
if ((task_pid(current) != pid) &&
(kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL))
goto err;
and I am not sure that task_pid(current) == pid should allow
the "arbitrary signals" if PIDFD_SIGNAL_PROCESS_GROUP.
Perhaps
/* Only allow sending arbitrary signals to yourself. */
ret = -EPERM;
if ((task_pid(current) != pid || type == PIDTYPE_PGID) &&
(kinfo.si_code >= 0 || kinfo.si_code == SI_TKILL)
goto err;
Honestly, we should probably just do:
if (kinfo->si_code != SI_USER)
goto err
and be done with it. If we get regressions reports about this then it's
easy to fix that up. But I find that unlikely. So why not try to get
away with something much simpler. What do you think?