* [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper
@ 2008-07-17 14:56 Daniel Hokka Zakrisson
2008-07-17 17:55 ` Eric W. Biederman
0 siblings, 1 reply; 4+ messages in thread
From: Daniel Hokka Zakrisson @ 2008-07-17 14:56 UTC (permalink / raw)
To: linux-kernel; +Cc: containers, oleg, ebiederm, xemul, akpm
p->pid == 1 is insufficient when there are multiple pid namespaces.
Instead, check whether the task is in the current task's
child reaper's thread group.
Signed-off-by: Daniel Hokka Zakrisson <daniel@hozac.com>
diff --git a/kernel/signal.c b/kernel/signal.c
index 93713a5..be932b9 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1142,10 +1142,20 @@ static int kill_something_info(int sig, struct
siginfo *info, int pid)
pid ? find_vpid(-pid) : task_pgrp(current));
} else {
int retval = 0, count = 0;
- struct task_struct * p;
+ struct task_struct *p, *reaper = task_child_reaper(current);
+
+ /*
+ * The reaper has died, so there's probably a
+ * SIGKILL pending. Return.
+ */
+ if (unlikely(!reaper)) {
+ ret = -ESRCH;
+ goto out;
+ }
for_each_process(p) {
- if (p->pid > 1 && !same_thread_group(p, current) &&
+ if (!same_thread_group(p, reaper) &&
+ !same_thread_group(p, current) &&
task_in_pid_ns(p, current->nsproxy->pid_ns)) {
int err = group_send_sig_info(sig, info, p);
++count;
@@ -1155,6 +1165,7 @@ static int kill_something_info(int sig, struct
siginfo *info, int pid)
}
ret = count ? retval : -ESRCH;
}
+out:
read_unlock(&tasklist_lock);
return ret;
--
1.5.5.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper
2008-07-17 14:56 [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper Daniel Hokka Zakrisson
@ 2008-07-17 17:55 ` Eric W. Biederman
2008-07-17 18:21 ` Daniel Hokka Zakrisson
0 siblings, 1 reply; 4+ messages in thread
From: Eric W. Biederman @ 2008-07-17 17:55 UTC (permalink / raw)
To: Daniel Hokka Zakrisson; +Cc: linux-kernel, containers, oleg, xemul, akpm
Daniel Hokka Zakrisson <daniel@hozac.com> writes:
> p->pid == 1 is insufficient when there are multiple pid namespaces.
> Instead, check whether the task is in the current task's
> child reaper's thread group.
We should just drop the check for init as it is redundant.
Eric
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper
2008-07-17 17:55 ` Eric W. Biederman
@ 2008-07-17 18:21 ` Daniel Hokka Zakrisson
2008-07-17 18:51 ` Eric W. Biederman
0 siblings, 1 reply; 4+ messages in thread
From: Daniel Hokka Zakrisson @ 2008-07-17 18:21 UTC (permalink / raw)
To: Eric W. Biederman; +Cc: linux-kernel, containers, oleg, xemul, akpm
Eric W. Biederman wrote:
> Daniel Hokka Zakrisson <daniel@hozac.com> writes:
>
>> p->pid == 1 is insufficient when there are multiple pid namespaces.
>> Instead, check whether the task is in the current task's
>> child reaper's thread group.
>
> We should just drop the check for init as it is redundant.
I'm not sure what you mean? Without protecting init here, kill -s 9 -- -1
will kill it (i.e. the init in the pid namespace). E.g.:
# vspace --new --pid --mount -- bash
# bash -c 'kill -s 9 -- -1'
will kill off all those processes, and dispose of the pid namespace.
> Eric
--
Daniel Hokka Zakrisson
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper
2008-07-17 18:21 ` Daniel Hokka Zakrisson
@ 2008-07-17 18:51 ` Eric W. Biederman
0 siblings, 0 replies; 4+ messages in thread
From: Eric W. Biederman @ 2008-07-17 18:51 UTC (permalink / raw)
To: Daniel Hokka Zakrisson; +Cc: linux-kernel, containers, oleg, xemul, akpm
"Daniel Hokka Zakrisson" <daniel@hozac.com> writes:
> Eric W. Biederman wrote:
>> Daniel Hokka Zakrisson <daniel@hozac.com> writes:
>>
>>> p->pid == 1 is insufficient when there are multiple pid namespaces.
>>> Instead, check whether the task is in the current task's
>>> child reaper's thread group.
>>
>> We should just drop the check for init as it is redundant.
Sorry that was a half truth. Outside of the context of pid namespaces it is true.
In the context of pid namespaces it is false because we haven't merged the patches
to drop signals from inside the pid namespace on the way to init.
So it is a check that _should_ be redundant.
Eric
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-07-17 18:52 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-17 14:56 [PATCH 2/2] signals: replace p->pid == 1 check with a check for task_child_reaper Daniel Hokka Zakrisson
2008-07-17 17:55 ` Eric W. Biederman
2008-07-17 18:21 ` Daniel Hokka Zakrisson
2008-07-17 18:51 ` Eric W. Biederman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox