Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161610AbbBECeP (ORCPT ); Wed, 4 Feb 2015 21:34:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42066 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161239AbbBECeM (ORCPT ); Wed, 4 Feb 2015 21:34:12 -0500 Subject: [RFC PATCH 1/8] nsproxy - refactor setns() From: Ian Kent To: Kernel Mailing List Cc: David Howells , Oleg Nesterov , Trond Myklebust , "J. Bruce Fields" , Benjamin Coddington , Al Viro , Jeff Layton , "Eric W. Biederman" Date: Thu, 05 Feb 2015 10:33:58 +0800 Message-ID: <20150205023357.8382.21949.stgit@pluto.fritz.box> In-Reply-To: <20150205021553.8382.16297.stgit@pluto.fritz.box> References: <20150205021553.8382.16297.stgit@pluto.fritz.box> User-Agent: StGit/0.17-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2433 Lines: 81 For usermode helpers to execute within a namspace a slightly different entry point to setns() that takes a namspace inode is needed. Signed-off-by: Ian Kent Cc: Benjamin Coddington Cc: Al Viro Cc: J. Bruce Fields Cc: David Howells Cc: Trond Myklebust Cc: Oleg Nesterov Cc: Eric W. Biederman Cc: Jeff Layton --- include/linux/nsproxy.h | 1 + kernel/nsproxy.c | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/linux/nsproxy.h b/include/linux/nsproxy.h index 35fa08f..c75bf12 100644 --- a/include/linux/nsproxy.h +++ b/include/linux/nsproxy.h @@ -62,6 +62,7 @@ extern struct nsproxy init_nsproxy; * */ +int setns_inode(struct inode *inode, int nstype); int copy_namespaces(unsigned long flags, struct task_struct *tsk); void exit_task_namespaces(struct task_struct *tsk); void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new); diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index 49746c8..27cc544 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c @@ -218,20 +218,15 @@ void exit_task_namespaces(struct task_struct *p) switch_task_namespaces(p, NULL); } -SYSCALL_DEFINE2(setns, int, fd, int, nstype) +int setns_inode(struct inode *inode, int nstype) { struct task_struct *tsk = current; struct nsproxy *new_nsproxy; - struct file *file; struct ns_common *ns; int err; - file = proc_ns_fget(fd); - if (IS_ERR(file)) - return PTR_ERR(file); - err = -EINVAL; - ns = get_proc_ns(file_inode(file)); + ns = get_proc_ns(inode); if (nstype && (ns->ops->type != nstype)) goto out; @@ -248,6 +243,18 @@ SYSCALL_DEFINE2(setns, int, fd, int, nstype) } switch_task_namespaces(tsk, new_nsproxy); out: + return err; +} + +SYSCALL_DEFINE2(setns, int, fd, int, nstype) +{ + struct file *file; + int err; + + file = proc_ns_fget(fd); + if (IS_ERR(file)) + return PTR_ERR(file); + err = setns_inode(file_inode(file), nstype); fput(file); return err; } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/