From 9a794e449a70fcf0b5a860eb82e6318c7ae84202 Mon Sep 17 00:00:00 2001 From: Sukadev Bhattiprolu Date: Thu, 2 Apr 2009 16:58:06 -0700 Subject: [PATCH] --- yaml --- r: 139684 b: refs/heads/master c: e4da026f980df125a4918c3bb9fe93185c7ef12a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/pid_namespace.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 9fe9db606310..7b12339c813f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 921cf9f63089c7442d44083477620132f4cea066 +refs/heads/master: e4da026f980df125a4918c3bb9fe93185c7ef12a diff --git a/trunk/kernel/pid_namespace.c b/trunk/kernel/pid_namespace.c index fab8ea86fac3..2d1001b4858d 100644 --- a/trunk/kernel/pid_namespace.c +++ b/trunk/kernel/pid_namespace.c @@ -152,6 +152,7 @@ void zap_pid_ns_processes(struct pid_namespace *pid_ns) { int nr; int rc; + struct task_struct *task; /* * The last thread in the cgroup-init thread group is terminating. @@ -169,7 +170,19 @@ void zap_pid_ns_processes(struct pid_namespace *pid_ns) read_lock(&tasklist_lock); nr = next_pidmap(pid_ns, 1); while (nr > 0) { - kill_proc_info(SIGKILL, SEND_SIG_PRIV, nr); + rcu_read_lock(); + + /* + * Use force_sig() since it clears SIGNAL_UNKILLABLE ensuring + * any nested-container's init processes don't ignore the + * signal + */ + task = pid_task(find_vpid(nr), PIDTYPE_PID); + if (task) + force_sig(SIGKILL, task); + + rcu_read_unlock(); + nr = next_pidmap(pid_ns, nr); } read_unlock(&tasklist_lock);