All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org (Eric W. Biederman)
To: Linux Containers
	<containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [REVIEW][PATCH 1/5] namespaces: Simplify copy_namespaces so it is clear what is going on.
Date: Thu, 29 Aug 2013 16:53:16 -0700	[thread overview]
Message-ID: <87ioyoyryr.fsf@xmission.com> (raw)
In-Reply-To: <87ob8gys0d.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> (Eric W. Biederman's message of "Thu, 29 Aug 2013 16:52:18 -0700")


Remove the test for the impossible case where tsk->nsproxy == NULL.  Fork
will never be called with tsk->nsproxy == NULL.

Only call get_nsproxy when we don't need to generate a new_nsproxy,
and mark the case where we don't generate a new nsproxy as likely.

Remove the code to drop an unnecessarily acquired nsproxy value.

Signed-off-by: "Eric W. Biederman" <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
---
 kernel/nsproxy.c |   35 +++++++++++------------------------
 1 files changed, 11 insertions(+), 24 deletions(-)

diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c
index d9afd2563..a1ed011 100644
--- a/kernel/nsproxy.c
+++ b/kernel/nsproxy.c
@@ -125,22 +125,16 @@ int copy_namespaces(unsigned long flags, struct task_struct *tsk)
 	struct nsproxy *old_ns = tsk->nsproxy;
 	struct user_namespace *user_ns = task_cred_xxx(tsk, user_ns);
 	struct nsproxy *new_ns;
-	int err = 0;
 
-	if (!old_ns)
+	if (likely(!(flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
+			      CLONE_NEWPID | CLONE_NEWNET)))) {
+		get_nsproxy(old_ns);
 		return 0;
-
-	get_nsproxy(old_ns);
-
-	if (!(flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
-				CLONE_NEWPID | CLONE_NEWNET)))
-		return 0;
-
-	if (!ns_capable(user_ns, CAP_SYS_ADMIN)) {
-		err = -EPERM;
-		goto out;
 	}
 
+	if (!ns_capable(user_ns, CAP_SYS_ADMIN))
+		return -EPERM;
+
 	/*
 	 * CLONE_NEWIPC must detach from the undolist: after switching
 	 * to a new ipc namespace, the semaphore arrays from the old
@@ -149,22 +143,15 @@ int copy_namespaces(unsigned long flags, struct task_struct *tsk)
 	 * it along with CLONE_NEWIPC.
 	 */
 	if ((flags & (CLONE_NEWIPC | CLONE_SYSVSEM)) ==
-		(CLONE_NEWIPC | CLONE_SYSVSEM)) {
-		err = -EINVAL;
-		goto out;
-	}
+		(CLONE_NEWIPC | CLONE_SYSVSEM)) 
+		return -EINVAL;
 
 	new_ns = create_new_namespaces(flags, tsk, user_ns, tsk->fs);
-	if (IS_ERR(new_ns)) {
-		err = PTR_ERR(new_ns);
-		goto out;
-	}
+	if (IS_ERR(new_ns))
+		return  PTR_ERR(new_ns);
 
 	tsk->nsproxy = new_ns;
-
-out:
-	put_nsproxy(old_ns);
-	return err;
+	return 0;
 }
 
 void free_nsproxy(struct nsproxy *ns)
-- 
1.7.5.4

WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman)
To: Linux Containers <containers@lists.linux-foundation.org>
Cc: "Serge E. Hallyn" <serge@hallyn.com>, <linux-kernel@vger.kernel.org>
Subject: [REVIEW][PATCH 1/5] namespaces: Simplify copy_namespaces so it is clear what is going on.
Date: Thu, 29 Aug 2013 16:53:16 -0700	[thread overview]
Message-ID: <87ioyoyryr.fsf@xmission.com> (raw)
In-Reply-To: <87ob8gys0d.fsf@xmission.com> (Eric W. Biederman's message of "Thu, 29 Aug 2013 16:52:18 -0700")


Remove the test for the impossible case where tsk->nsproxy == NULL.  Fork
will never be called with tsk->nsproxy == NULL.

Only call get_nsproxy when we don't need to generate a new_nsproxy,
and mark the case where we don't generate a new nsproxy as likely.

Remove the code to drop an unnecessarily acquired nsproxy value.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
---
 kernel/nsproxy.c |   35 +++++++++++------------------------
 1 files changed, 11 insertions(+), 24 deletions(-)

diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c
index d9afd2563..a1ed011 100644
--- a/kernel/nsproxy.c
+++ b/kernel/nsproxy.c
@@ -125,22 +125,16 @@ int copy_namespaces(unsigned long flags, struct task_struct *tsk)
 	struct nsproxy *old_ns = tsk->nsproxy;
 	struct user_namespace *user_ns = task_cred_xxx(tsk, user_ns);
 	struct nsproxy *new_ns;
-	int err = 0;
 
-	if (!old_ns)
+	if (likely(!(flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
+			      CLONE_NEWPID | CLONE_NEWNET)))) {
+		get_nsproxy(old_ns);
 		return 0;
-
-	get_nsproxy(old_ns);
-
-	if (!(flags & (CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC |
-				CLONE_NEWPID | CLONE_NEWNET)))
-		return 0;
-
-	if (!ns_capable(user_ns, CAP_SYS_ADMIN)) {
-		err = -EPERM;
-		goto out;
 	}
 
+	if (!ns_capable(user_ns, CAP_SYS_ADMIN))
+		return -EPERM;
+
 	/*
 	 * CLONE_NEWIPC must detach from the undolist: after switching
 	 * to a new ipc namespace, the semaphore arrays from the old
@@ -149,22 +143,15 @@ int copy_namespaces(unsigned long flags, struct task_struct *tsk)
 	 * it along with CLONE_NEWIPC.
 	 */
 	if ((flags & (CLONE_NEWIPC | CLONE_SYSVSEM)) ==
-		(CLONE_NEWIPC | CLONE_SYSVSEM)) {
-		err = -EINVAL;
-		goto out;
-	}
+		(CLONE_NEWIPC | CLONE_SYSVSEM)) 
+		return -EINVAL;
 
 	new_ns = create_new_namespaces(flags, tsk, user_ns, tsk->fs);
-	if (IS_ERR(new_ns)) {
-		err = PTR_ERR(new_ns);
-		goto out;
-	}
+	if (IS_ERR(new_ns))
+		return  PTR_ERR(new_ns);
 
 	tsk->nsproxy = new_ns;
-
-out:
-	put_nsproxy(old_ns);
-	return err;
+	return 0;
 }
 
 void free_nsproxy(struct nsproxy *ns)
-- 
1.7.5.4


  parent reply	other threads:[~2013-08-29 23:53 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-29 23:52 [REVIEW][PATCH 0/5] A couple of lingering namespace patches Eric W. Biederman
2013-08-29 23:52 ` Eric W. Biederman
     [not found] ` <87ob8gys0d.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-29 23:53   ` Eric W. Biederman [this message]
2013-08-29 23:53     ` [REVIEW][PATCH 1/5] namespaces: Simplify copy_namespaces so it is clear what is going on Eric W. Biederman
     [not found]     ` <87ioyoyryr.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-30 16:10       ` Serge E. Hallyn
2013-08-30 16:10         ` Serge E. Hallyn
2013-08-29 23:54   ` [REVIEW][PATCH 2/5] userns: Allow PR_CAPBSET_DROP in a user namespace Eric W. Biederman
2013-08-29 23:54     ` Eric W. Biederman
     [not found]     ` <87eh9cyrxj.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-30  1:15       ` Serge E. Hallyn
2013-08-30  1:15         ` Serge E. Hallyn
2013-08-29 23:55   ` [REVIEW][PATCH 3/5] pidns: Don't have unshare(CLONE_NEWPID) imply CLONE_THREAD Eric W. Biederman
2013-08-29 23:55     ` Eric W. Biederman
     [not found]     ` <87a9k0yrvu.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-30 16:38       ` Serge E. Hallyn
2013-08-30 16:38         ` Serge E. Hallyn
     [not found]         ` <20130830163805.GB18857-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2013-08-30 23:49           ` Eric W. Biederman
2013-08-30 23:49             ` Eric W. Biederman
     [not found]             ` <87ppsuviwb.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-31  5:31               ` Serge E. Hallyn
2013-08-31  5:31                 ` Serge E. Hallyn
2013-09-08 17:00       ` Oleg Nesterov
2013-09-08 17:00         ` Oleg Nesterov
2013-08-29 23:55   ` [REVIEW][PATCH 4/5] capabilities: allow nice if we are privileged Eric W. Biederman
2013-08-29 23:55     ` Eric W. Biederman
2013-08-29 23:56   ` [REVIEW][PATCH 5/5] userns: Kill nsown_capable it makes the wrong thing easy Eric W. Biederman
2013-08-29 23:56     ` Eric W. Biederman
     [not found]     ` <871u5cyrst.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-08-30  1:14       ` Serge E. Hallyn
2013-08-30  1:14     ` Serge E. Hallyn

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=87ioyoyryr.fsf@xmission.com \
    --to=ebiederm-as9lmozglivwk0htik3j/w@public.gmane.org \
    --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /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.