All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serge@hallyn.com>
To: "Serge E. Hallyn" <serge@hallyn.com>
Cc: LSM <linux-security-module@vger.kernel.org>,
	James Morris <jmorris@namei.org>,
	Kees Cook <kees.cook@canonical.com>,
	containers@lists.linux-foundation.org,
	kernel list <linux-kernel@vger.kernel.org>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Alexey Dobriyan <adobriyan@gmail.com>,
	Michael Kerrisk <michael.kerrisk@gmail.com>
Subject: [RFC 4/5] user namespaces: allow killing tasks in your own or child userns
Date: Fri, 17 Dec 2010 15:26:59 +0000	[thread overview]
Message-ID: <20101217152659.GD11162@mail.hallyn.com> (raw)
In-Reply-To: <20101217152625.GC11162@mail.hallyn.com>

Changelog:
	Dec 8: Fixed bug in my check_kill_permission pointed out by
	       Eric Biederman.
	Dec 13: Apply Eric's suggestion to pass target task into kill_ok_by_cred()
	        for clarity

Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
---
 kernel/signal.c |   33 ++++++++++++++++++++++++++++-----
 1 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index 4e3cff1..499bd36 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -636,6 +636,33 @@ static inline bool si_fromuser(const struct siginfo *info)
 }
 
 /*
+ * called with RCU read lock from check_kill_permission()
+ */
+static inline int kill_ok_by_cred(struct task_struct *t)
+{
+	struct cred *cred = current_cred();
+	struct cred *tcred = __task_cred(t);
+
+	if (cred->user->user_ns != tcred->user->user_ns) {
+		/* userids are not equivalent - either you have the
+		   capability to the target user ns or you don't */
+		if (ns_capable(tcred->user->user_ns, CAP_KILL))
+			return 1;
+		return 0;
+	}
+
+	/* same user namespace - usual credentials checks apply */
+	if ((cred->euid ^ tcred->suid) &&
+	    (cred->euid ^ tcred->uid) &&
+	    (cred->uid  ^ tcred->suid) &&
+	    (cred->uid  ^ tcred->uid) &&
+	    !ns_capable(tcred->user->user_ns, CAP_KILL))
+		return 0;
+
+	return 1;
+}
+
+/*
  * Bad permissions for sending the signal
  * - the caller must hold the RCU read lock
  */
@@ -659,11 +686,7 @@ static int check_kill_permission(int sig, struct siginfo *info,
 	cred = current_cred();
 	tcred = __task_cred(t);
 	if (!same_thread_group(current, t) &&
-	    (cred->euid ^ tcred->suid) &&
-	    (cred->euid ^ tcred->uid) &&
-	    (cred->uid  ^ tcred->suid) &&
-	    (cred->uid  ^ tcred->uid) &&
-	    !capable(CAP_KILL)) {
+	    !kill_ok_by_cred(t)) {
 		switch (sig) {
 		case SIGCONT:
 			sid = task_session(t);
-- 
1.7.0.4


  reply	other threads:[~2010-12-17 15:26 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-17 15:22 [RFC 0/5] user namespaces: start clamping down Serge E. Hallyn
     [not found] ` <20101217152246.GA8221-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:24   ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Serge E. Hallyn
2010-12-17 15:24 ` Serge E. Hallyn
2010-12-17 15:25   ` [RFC 2/5] user namespaces: make capabilities relative to the user namespace Serge E. Hallyn
     [not found]     ` <20101217152547.GB11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:26       ` [RFC 3/5] user namespaces: allow sethostname in a container Serge E. Hallyn
2010-12-17 15:26     ` Serge E. Hallyn
2010-12-17 15:26       ` Serge E. Hallyn [this message]
     [not found]         ` <20101217152659.GD11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:27           ` [RFC 5/5] user namespaces: Allow ptrace from non-init user namespaces Serge E. Hallyn
2010-12-17 19:31           ` [RFC 4/5] user namespaces: allow killing tasks in your own or child userns Eric W. Biederman
2010-12-17 15:27         ` [RFC 5/5] user namespaces: Allow ptrace from non-init user namespaces Serge E. Hallyn
     [not found]           ` <20101217152737.GE11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 19:45             ` Eric W. Biederman
2010-12-17 19:45           ` Eric W. Biederman
     [not found]             ` <m1hbecqj2q.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:04               ` Serge Hallyn
2011-01-01  4:47               ` Serge E. Hallyn
2010-12-17 20:04             ` Serge Hallyn
2011-01-01  4:47             ` Serge E. Hallyn
2010-12-17 19:31         ` [RFC 4/5] user namespaces: allow killing tasks in your own or child userns Eric W. Biederman
     [not found]           ` <m14oacryar.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:09             ` Serge E. Hallyn
2010-12-17 20:09           ` Serge E. Hallyn
2010-12-17 20:17             ` Eric W. Biederman
2010-12-17 20:22               ` Serge E. Hallyn
2011-01-01  4:45               ` Serge E. Hallyn
2011-01-01 23:10                 ` Eric W. Biederman
     [not found]                   ` <m1zkrkuso4.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2011-01-02 14:39                     ` Serge E. Hallyn
2011-01-02 14:39                   ` Serge E. Hallyn
     [not found]                 ` <20110101044522.GA26476-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2011-01-01 23:10                   ` Eric W. Biederman
     [not found]               ` <m1d3p0qhl5.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:22                 ` Serge E. Hallyn
2011-01-01  4:45                 ` Serge E. Hallyn
     [not found]             ` <20101217200903.GA15528-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 20:17               ` Eric W. Biederman
     [not found]       ` <20101217152625.GC11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:26         ` Serge E. Hallyn
2010-12-17 15:56   ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Alexey Dobriyan
2010-12-17 16:00     ` Alexey Dobriyan
     [not found]       ` <AANLkTik2ry7zbRMgiwhrXMYfQ4tr07BW0ODCNbKBMWmc-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-12-17 16:17         ` Serge Hallyn
2010-12-17 16:17       ` Serge Hallyn
     [not found]     ` <AANLkTinPBAPjeEdhn21JN6zVpAKDHR9=3gszj84CyyNx-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-12-17 16:00       ` Alexey Dobriyan
2010-12-17 16:12       ` Serge Hallyn
2010-12-17 16:12     ` Serge Hallyn
     [not found]   ` <20101217152458.GA11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:25     ` [RFC 2/5] user namespaces: make capabilities relative to the user namespace Serge E. Hallyn
2010-12-17 15:56     ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Alexey Dobriyan
2010-12-17 17:31     ` Greg KH
2010-12-17 17:31   ` Greg KH
     [not found]     ` <20101217173125.GA29982-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-17 19:26       ` Eric W. Biederman
2010-12-17 19:46       ` Serge Hallyn
2010-12-17 19:26     ` Eric W. Biederman
2010-12-17 19:58       ` Greg KH
2010-12-17 20:40         ` Eric W. Biederman
     [not found]           ` <m1ipysm8us.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 23:15             ` Greg KH
2010-12-17 23:15           ` Greg KH
2010-12-18  6:32             ` Eric W. Biederman
     [not found]               ` <m1vd2rlhez.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-18 17:56                 ` Greg KH
2010-12-18 17:56               ` Greg KH
     [not found]             ` <20101217231527.GA21227-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-18  6:32               ` Eric W. Biederman
     [not found]         ` <20101217195829.GB1410-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-17 20:40           ` Eric W. Biederman
     [not found]       ` <m18vzoryit.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 19:58         ` Greg KH
2010-12-17 19:46     ` Serge Hallyn
2010-12-17 19:57       ` Greg KH
2010-12-17 19:57       ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101217152659.GD11162@mail.hallyn.com \
    --to=serge@hallyn.com \
    --cc=adobriyan@gmail.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=jmorris@namei.org \
    --cc=kees.cook@canonical.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=michael.kerrisk@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.