linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Serge E. Hallyn" <serge@hallyn.com>
To: "Eric W. Beiderman" <ebiederm@xmission.com>
Cc: linux-kernel@vger.kernel.org,
	Linux Containers <containers@lists.linux-foundation.org>,
	Cyrill Gorcunov <gorcunov@openvz.org>,
	linux-security-module@vger.kernel.org,
	Al Viro <viro@ZenIV.linux.org.uk>,
	linux-fsdevel@vger.kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH 18/43] userns: Convert group_info values from gid_t to kgid_t.
Date: Wed, 18 Apr 2012 18:49:36 +0000	[thread overview]
Message-ID: <20120418184936.GC4984@mail.hallyn.com> (raw)
In-Reply-To: <1333862139-31737-18-git-send-email-ebiederm@xmission.com>

Quoting Eric W. Beiderman (ebiederm@xmission.com):
> From: Eric W. Biederman <ebiederm@xmission.com>
> 
> As a first step to converting struct cred to be all kuid_t and kgid_t
> values convert the group values stored in group_info to always be
> kgid_t values.   Unless user namespaces are used this change should
> have no effect.
> 
> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
> ---
>  arch/s390/kernel/compat_linux.c   |   13 ++++++++-
>  fs/nfsd/auth.c                    |    5 ++-
>  fs/proc/array.c                   |    5 +++-
>  include/linux/cred.h              |    9 ++++---
>  kernel/groups.c                   |   48 +++++++++++++++++++-----------------
>  kernel/uid16.c                    |   14 +++++++++-
>  net/ipv4/ping.c                   |   11 ++++++--
>  net/sunrpc/auth_generic.c         |    4 +-
>  net/sunrpc/auth_gss/svcauth_gss.c |    7 ++++-
>  net/sunrpc/auth_unix.c            |   15 ++++++++---
>  net/sunrpc/svcauth_unix.c         |   18 ++++++++++---
>  security/keys/permission.c        |    3 +-
>  12 files changed, 103 insertions(+), 49 deletions(-)
> 
> diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c
> index ab64bdb..5baac18 100644
> --- a/arch/s390/kernel/compat_linux.c
> +++ b/arch/s390/kernel/compat_linux.c
> @@ -173,11 +173,14 @@ asmlinkage long sys32_setfsgid16(u16 gid)
>  
>  static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	u16 group;
> +	kgid_t kgid;
>  
>  	for (i = 0; i < group_info->ngroups; i++) {
> -		group = (u16)GROUP_AT(group_info, i);
> +		kgid = GROUP_AT(group_info, i);
> +		group = (u16)from_kgid_munged(user_ns, kgid);
>  		if (put_user(group, grouplist+i))
>  			return -EFAULT;
>  	}
> @@ -187,13 +190,19 @@ static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info
>  
>  static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	u16 group;

need

	kgid_t kgid;

here

>  
>  	for (i = 0; i < group_info->ngroups; i++) {
>  		if (get_user(group, grouplist+i))
>  			return  -EFAULT;
> -		GROUP_AT(group_info, i) = (gid_t)group;
> +
> +		kgid = make_kgid(user_ns, (gid_t)group);
> +		if (!gid_valid(kgid))
> +			return -EINVAL;
> +
> +		GROUP_AT(group_info, i) = kgid;
>  	}
>  
>  	return 0;
> diff --git a/fs/nfsd/auth.c b/fs/nfsd/auth.c
> index 79717a4..204438c 100644
> --- a/fs/nfsd/auth.c
> +++ b/fs/nfsd/auth.c
> @@ -1,6 +1,7 @@
>  /* Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de> */
>  
>  #include <linux/sched.h>
> +#include <linux/user_namespace.h>
>  #include "nfsd.h"
>  #include "auth.h"
>  
> @@ -56,8 +57,8 @@ int nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
>  			goto oom;
>  
>  		for (i = 0; i < rqgi->ngroups; i++) {
> -			if (!GROUP_AT(rqgi, i))
> -				GROUP_AT(gi, i) = exp->ex_anon_gid;
> +			if (gid_eq(GLOBAL_ROOT_GID, GROUP_AT(rqgi, i)))
> +				GROUP_AT(gi, i) = make_kgid(&init_user_ns, exp->ex_anon_gid);
>  			else
>  				GROUP_AT(gi, i) = GROUP_AT(rqgi, i);
>  		}
> diff --git a/fs/proc/array.c b/fs/proc/array.c
> index f9bd395..36a0a91 100644
> --- a/fs/proc/array.c
> +++ b/fs/proc/array.c
> @@ -81,6 +81,7 @@
>  #include <linux/pid_namespace.h>
>  #include <linux/ptrace.h>
>  #include <linux/tracehook.h>
> +#include <linux/user_namespace.h>
>  
>  #include <asm/pgtable.h>
>  #include <asm/processor.h>
> @@ -161,6 +162,7 @@ static inline const char *get_task_state(struct task_struct *tsk)
>  static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
>  				struct pid *pid, struct task_struct *p)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	struct group_info *group_info;
>  	int g;
>  	struct fdtable *fdt = NULL;
> @@ -205,7 +207,8 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
>  	task_unlock(p);
>  
>  	for (g = 0; g < min(group_info->ngroups, NGROUPS_SMALL); g++)
> -		seq_printf(m, "%d ", GROUP_AT(group_info, g));
> +		seq_printf(m, "%d ",
> +			   from_kgid_munged(user_ns, GROUP_AT(group_info, g)));
>  	put_cred(cred);
>  
>  	seq_putc(m, '\n');
> diff --git a/include/linux/cred.h b/include/linux/cred.h
> index 2c60ec8..0ab3cda 100644
> --- a/include/linux/cred.h
> +++ b/include/linux/cred.h
> @@ -17,6 +17,7 @@
>  #include <linux/key.h>
>  #include <linux/selinux.h>
>  #include <linux/atomic.h>
> +#include <linux/uidgid.h>
>  
>  struct user_struct;
>  struct cred;
> @@ -26,14 +27,14 @@ struct inode;
>   * COW Supplementary groups list
>   */
>  #define NGROUPS_SMALL		32
> -#define NGROUPS_PER_BLOCK	((unsigned int)(PAGE_SIZE / sizeof(gid_t)))
> +#define NGROUPS_PER_BLOCK	((unsigned int)(PAGE_SIZE / sizeof(kgid_t)))
>  
>  struct group_info {
>  	atomic_t	usage;
>  	int		ngroups;
>  	int		nblocks;
> -	gid_t		small_block[NGROUPS_SMALL];
> -	gid_t		*blocks[0];
> +	kgid_t		small_block[NGROUPS_SMALL];
> +	kgid_t		*blocks[0];
>  };
>  
>  /**
> @@ -66,7 +67,7 @@ extern struct group_info init_groups;
>  extern void groups_free(struct group_info *);
>  extern int set_current_groups(struct group_info *);
>  extern int set_groups(struct cred *, struct group_info *);
> -extern int groups_search(const struct group_info *, gid_t);
> +extern int groups_search(const struct group_info *, kgid_t);
>  
>  /* access the groups "array" with this macro */
>  #define GROUP_AT(gi, i) \
> diff --git a/kernel/groups.c b/kernel/groups.c
> index 99b53d1..84156f2 100644
> --- a/kernel/groups.c
> +++ b/kernel/groups.c
> @@ -31,7 +31,7 @@ struct group_info *groups_alloc(int gidsetsize)
>  		group_info->blocks[0] = group_info->small_block;
>  	else {
>  		for (i = 0; i < nblocks; i++) {
> -			gid_t *b;
> +			kgid_t *b;
>  			b = (void *)__get_free_page(GFP_USER);
>  			if (!b)
>  				goto out_undo_partial_alloc;
> @@ -66,18 +66,15 @@ EXPORT_SYMBOL(groups_free);
>  static int groups_to_user(gid_t __user *grouplist,
>  			  const struct group_info *group_info)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	unsigned int count = group_info->ngroups;
>  
> -	for (i = 0; i < group_info->nblocks; i++) {
> -		unsigned int cp_count = min(NGROUPS_PER_BLOCK, count);
> -		unsigned int len = cp_count * sizeof(*grouplist);
> -
> -		if (copy_to_user(grouplist, group_info->blocks[i], len))
> +	for (i = 0; i < count; i++) {
> +		gid_t gid;
> +		gid = from_kgid_munged(user_ns, GROUP_AT(group_info, i));
> +		if (put_user(gid, grouplist+i))
>  			return -EFAULT;
> -
> -		grouplist += NGROUPS_PER_BLOCK;
> -		count -= cp_count;
>  	}
>  	return 0;
>  }
> @@ -86,18 +83,21 @@ static int groups_to_user(gid_t __user *grouplist,
>  static int groups_from_user(struct group_info *group_info,
>      gid_t __user *grouplist)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	unsigned int count = group_info->ngroups;
>  
> -	for (i = 0; i < group_info->nblocks; i++) {
> -		unsigned int cp_count = min(NGROUPS_PER_BLOCK, count);
> -		unsigned int len = cp_count * sizeof(*grouplist);
> -
> -		if (copy_from_user(group_info->blocks[i], grouplist, len))
> +	for (i = 0; i < count; i++) {
> +		gid_t gid;
> +		kgid_t kgid;
> +		if (get_user(gid, grouplist+i))
>  			return -EFAULT;
>  
> -		grouplist += NGROUPS_PER_BLOCK;
> -		count -= cp_count;
> +		kgid = make_kgid(user_ns, gid);
> +		if (!gid_valid(kgid))
> +			return -EINVAL;
> +
> +		GROUP_AT(group_info, i) = kgid;
>  	}
>  	return 0;
>  }
> @@ -117,9 +117,9 @@ static void groups_sort(struct group_info *group_info)
>  		for (base = 0; base < max; base++) {
>  			int left = base;
>  			int right = left + stride;
> -			gid_t tmp = GROUP_AT(group_info, right);
> +			kgid_t tmp = GROUP_AT(group_info, right);
>  
> -			while (left >= 0 && GROUP_AT(group_info, left) > tmp) {
> +			while (left >= 0 && gid_gt(GROUP_AT(group_info, left), tmp)) {
>  				GROUP_AT(group_info, right) =
>  				    GROUP_AT(group_info, left);
>  				right = left;
> @@ -132,7 +132,7 @@ static void groups_sort(struct group_info *group_info)
>  }
>  
>  /* a simple bsearch */
> -int groups_search(const struct group_info *group_info, gid_t grp)
> +int groups_search(const struct group_info *group_info, kgid_t grp)
>  {
>  	unsigned int left, right;
>  
> @@ -143,9 +143,9 @@ int groups_search(const struct group_info *group_info, gid_t grp)
>  	right = group_info->ngroups;
>  	while (left < right) {
>  		unsigned int mid = (left+right)/2;
> -		if (grp > GROUP_AT(group_info, mid))
> +		if (gid_gt(grp, GROUP_AT(group_info, mid)))
>  			left = mid + 1;
> -		else if (grp < GROUP_AT(group_info, mid))
> +		else if (gid_lt(grp, GROUP_AT(group_info, mid)))
>  			right = mid;
>  		else
>  			return 1;
> @@ -262,7 +262,8 @@ int in_group_p(gid_t grp)
>  	int retval = 1;
>  
>  	if (grp != cred->fsgid)
> -		retval = groups_search(cred->group_info, grp);
> +		retval = groups_search(cred->group_info,
> +				       make_kgid(cred->user_ns, grp));
>  	return retval;
>  }
>  
> @@ -274,7 +275,8 @@ int in_egroup_p(gid_t grp)
>  	int retval = 1;
>  
>  	if (grp != cred->egid)
> -		retval = groups_search(cred->group_info, grp);
> +		retval = groups_search(cred->group_info,
> +				       make_kgid(cred->user_ns, grp));
>  	return retval;
>  }
>  
> diff --git a/kernel/uid16.c b/kernel/uid16.c
> index 51c6e89..e530bc3 100644
> --- a/kernel/uid16.c
> +++ b/kernel/uid16.c
> @@ -134,11 +134,14 @@ SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid)
>  static int groups16_to_user(old_gid_t __user *grouplist,
>      struct group_info *group_info)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	old_gid_t group;
> +	kgid_t kgid;
>  
>  	for (i = 0; i < group_info->ngroups; i++) {
> -		group = high2lowgid(GROUP_AT(group_info, i));
> +		kgid = GROUP_AT(group_info, i);
> +		group = high2lowgid(from_kgid_munged(user_ns, kgid));
>  		if (put_user(group, grouplist+i))
>  			return -EFAULT;
>  	}
> @@ -149,13 +152,20 @@ static int groups16_to_user(old_gid_t __user *grouplist,
>  static int groups16_from_user(struct group_info *group_info,
>      old_gid_t __user *grouplist)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	int i;
>  	old_gid_t group;
> +	kgid_t kgid;
>  
>  	for (i = 0; i < group_info->ngroups; i++) {
>  		if (get_user(group, grouplist+i))
>  			return  -EFAULT;
> -		GROUP_AT(group_info, i) = low2highgid(group);
> +
> +		kgid = make_kgid(user_ns, low2highgid(group));
> +		if (!gid_valid(kgid))
> +			return -EINVAL;
> +
> +		GROUP_AT(group_info, i) = kgid;
>  	}
>  
>  	return 0;
> diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
> index 50009c7..9d3044f 100644
> --- a/net/ipv4/ping.c
> +++ b/net/ipv4/ping.c
> @@ -205,17 +205,22 @@ static int ping_init_sock(struct sock *sk)
>  	gid_t range[2];
>  	struct group_info *group_info = get_current_groups();
>  	int i, j, count = group_info->ngroups;
> +	kgid_t low, high;
>  
>  	inet_get_ping_group_range_net(net, range, range+1);
> +	low = make_kgid(&init_user_ns, range[0]);
> +	high = make_kgid(&init_user_ns, range[1]);
> +	if (!gid_valid(low) || !gid_valid(high) || gid_lt(high, low))
> +		return -EACCES;
> +
>  	if (range[0] <= group && group <= range[1])
>  		return 0;
>  
>  	for (i = 0; i < group_info->nblocks; i++) {
>  		int cp_count = min_t(int, NGROUPS_PER_BLOCK, count);
> -
>  		for (j = 0; j < cp_count; j++) {
> -			group = group_info->blocks[i][j];
> -			if (range[0] <= group && group <= range[1])
> +			kgid_t gid = group_info->blocks[i][j];
> +			if (gid_lte(low, gid) && gid_lte(gid, high))
>  				return 0;
>  		}
>  
> diff --git a/net/sunrpc/auth_generic.c b/net/sunrpc/auth_generic.c
> index 75762f3..6ed6f20 100644
> --- a/net/sunrpc/auth_generic.c
> +++ b/net/sunrpc/auth_generic.c
> @@ -160,8 +160,8 @@ generic_match(struct auth_cred *acred, struct rpc_cred *cred, int flags)
>  	if (gcred->acred.group_info->ngroups != acred->group_info->ngroups)
>  		goto out_nomatch;
>  	for (i = 0; i < gcred->acred.group_info->ngroups; i++) {
> -		if (GROUP_AT(gcred->acred.group_info, i) !=
> -				GROUP_AT(acred->group_info, i))
> +		if (!gid_eq(GROUP_AT(gcred->acred.group_info, i),
> +				GROUP_AT(acred->group_info, i)))
>  			goto out_nomatch;
>  	}
>  out_match:
> diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
> index 1600cfb..28b62db 100644
> --- a/net/sunrpc/auth_gss/svcauth_gss.c
> +++ b/net/sunrpc/auth_gss/svcauth_gss.c
> @@ -41,6 +41,7 @@
>  #include <linux/types.h>
>  #include <linux/module.h>
>  #include <linux/pagemap.h>
> +#include <linux/user_namespace.h>
>  
>  #include <linux/sunrpc/auth_gss.h>
>  #include <linux/sunrpc/gss_err.h>
> @@ -470,9 +471,13 @@ static int rsc_parse(struct cache_detail *cd,
>  		status = -EINVAL;
>  		for (i=0; i<N; i++) {
>  			gid_t gid;
> +			kgid_t kgid;
>  			if (get_int(&mesg, &gid))
>  				goto out;
> -			GROUP_AT(rsci.cred.cr_group_info, i) = gid;
> +			kgid = make_kgid(&init_user_ns, gid);
> +			if (!gid_valid(kgid))
> +				goto out;
> +			GROUP_AT(rsci.cred.cr_group_info, i) = kgid;
>  		}
>  
>  		/* mech name */
> diff --git a/net/sunrpc/auth_unix.c b/net/sunrpc/auth_unix.c
> index e50502d..52c5abd 100644
> --- a/net/sunrpc/auth_unix.c
> +++ b/net/sunrpc/auth_unix.c
> @@ -12,6 +12,7 @@
>  #include <linux/module.h>
>  #include <linux/sunrpc/clnt.h>
>  #include <linux/sunrpc/auth.h>
> +#include <linux/user_namespace.h>
>  
>  #define NFS_NGROUPS	16
>  
> @@ -78,8 +79,11 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
>  		groups = NFS_NGROUPS;
>  
>  	cred->uc_gid = acred->gid;
> -	for (i = 0; i < groups; i++)
> -		cred->uc_gids[i] = GROUP_AT(acred->group_info, i);
> +	for (i = 0; i < groups; i++) {
> +		gid_t gid;
> +		gid = from_kgid(&init_user_ns, GROUP_AT(acred->group_info, i));
> +		cred->uc_gids[i] = gid;
> +	}
>  	if (i < NFS_NGROUPS)
>  		cred->uc_gids[i] = NOGROUP;
>  
> @@ -126,9 +130,12 @@ unx_match(struct auth_cred *acred, struct rpc_cred *rcred, int flags)
>  		groups = acred->group_info->ngroups;
>  	if (groups > NFS_NGROUPS)
>  		groups = NFS_NGROUPS;
> -	for (i = 0; i < groups ; i++)
> -		if (cred->uc_gids[i] != GROUP_AT(acred->group_info, i))
> +	for (i = 0; i < groups ; i++) {
> +		gid_t gid;
> +		gid = from_kgid(&init_user_ns, GROUP_AT(acred->group_info, i));
> +		if (cred->uc_gids[i] != gid)
>  			return 0;
> +	}
>  	if (groups < NFS_NGROUPS &&
>  	    cred->uc_gids[groups] != NOGROUP)
>  		return 0;
> diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
> index 521d8f7..71ec853 100644
> --- a/net/sunrpc/svcauth_unix.c
> +++ b/net/sunrpc/svcauth_unix.c
> @@ -14,6 +14,7 @@
>  #include <net/sock.h>
>  #include <net/ipv6.h>
>  #include <linux/kernel.h>
> +#include <linux/user_namespace.h>
>  #define RPCDBG_FACILITY	RPCDBG_AUTH
>  
>  #include <linux/sunrpc/clnt.h>
> @@ -530,11 +531,15 @@ static int unix_gid_parse(struct cache_detail *cd,
>  
>  	for (i = 0 ; i < gids ; i++) {
>  		int gid;
> +		kgid_t kgid;
>  		rv = get_int(&mesg, &gid);
>  		err = -EINVAL;
>  		if (rv)
>  			goto out;
> -		GROUP_AT(ug.gi, i) = gid;
> +		kgid = make_kgid(&init_user_ns, gid);
> +		if (!gid_valid(kgid))
> +			goto out;
> +		GROUP_AT(ug.gi, i) = kgid;
>  	}
>  
>  	ugp = unix_gid_lookup(cd, uid);
> @@ -563,6 +568,7 @@ static int unix_gid_show(struct seq_file *m,
>  			 struct cache_detail *cd,
>  			 struct cache_head *h)
>  {
> +	struct user_namespace *user_ns = current_user_ns();
>  	struct unix_gid *ug;
>  	int i;
>  	int glen;
> @@ -580,7 +586,7 @@ static int unix_gid_show(struct seq_file *m,
>  
>  	seq_printf(m, "%u %d:", ug->uid, glen);
>  	for (i = 0; i < glen; i++)
> -		seq_printf(m, " %d", GROUP_AT(ug->gi, i));
> +		seq_printf(m, " %d", from_kgid_munged(user_ns, GROUP_AT(ug->gi, i)));
>  	seq_printf(m, "\n");
>  	return 0;
>  }
> @@ -831,8 +837,12 @@ svcauth_unix_accept(struct svc_rqst *rqstp, __be32 *authp)
>  	cred->cr_group_info = groups_alloc(slen);
>  	if (cred->cr_group_info == NULL)
>  		return SVC_CLOSE;
> -	for (i = 0; i < slen; i++)
> -		GROUP_AT(cred->cr_group_info, i) = svc_getnl(argv);
> +	for (i = 0; i < slen; i++) {
> +		kgid_t kgid = make_kgid(&init_user_ns, svc_getnl(argv));
> +		if (!gid_valid(kgid))
> +			goto badcred;
> +		GROUP_AT(cred->cr_group_info, i) = kgid;
> +	}
>  	if (svc_getu32(argv) != htonl(RPC_AUTH_NULL) || svc_getu32(argv) != 0) {
>  		*authp = rpc_autherr_badverf;
>  		return SVC_DENIED;
> diff --git a/security/keys/permission.c b/security/keys/permission.c
> index e146cbd..5442900 100644
> --- a/security/keys/permission.c
> +++ b/security/keys/permission.c
> @@ -53,7 +53,8 @@ int key_task_permission(const key_ref_t key_ref, const struct cred *cred,
>  			goto use_these_perms;
>  		}
>  
> -		ret = groups_search(cred->group_info, key->gid);
> +		ret = groups_search(cred->group_info,
> +				    make_kgid(current_user_ns(), key->gid));
>  		if (ret) {
>  			kperm = key->perm >> 8;
>  			goto use_these_perms;
> -- 
> 1.7.2.5
> 
> _______________________________________________
> Containers mailing list
> Containers@lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/containers

  reply	other threads:[~2012-04-18 18:48 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-08  5:10 [REVIEW][PATCH 0/43] Completing the user namespace Eric W. Biederman
2012-04-08  5:15 ` [PATCH 21/43] userns: Convert sched_set_affinity and sched_set_scheduler's permission checks "Eric W. Beiderman
2012-04-18 18:50   ` Serge E. Hallyn
     [not found] ` <m11unyn70b.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-08  5:14   ` [PATCH 01/43] vfs: Don't allow a user namespace root to make device nodes "Eric W. Beiderman
2012-04-08  5:14   ` [PATCH 02/43] userns: Kill bogus declaration of function release_uids "Eric W. Beiderman
2012-04-08  5:14   ` [PATCH 03/43] userns: Replace netlink uses of cap_raised with capable "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 04/43] userns: Remove unnecessary cast to struct user_struct when copying cred->user "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 05/43] cred: Add forward declaration of init_user_ns in all cases "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 06/43] userns: Use cred->user_ns instead of cred->user->user_ns "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 07/43] cred: Refcount the user_ns pointed to by the cred "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 08/43] userns: Add an explicit reference to the parent user namespace "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 09/43] mqueue: Explicitly capture the user namespace to send the notification to "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 10/43] userns: Deprecate and rename the user_namespace reference in the user_struct "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 11/43] userns: Start out with a full set of capabilities "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 12/43] userns: Replace the hard to write inode_userns with inode_capable "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 13/43] userns: Add kuid_t and kgid_t and associated infrastructure in uidgid.h "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 14/43] userns: Add a Kconfig option to enforce strict kuid and kgid type checks "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 15/43] userns: Disassociate user_struct from the user_namespace "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 16/43] userns: Simplify the user_namespace by making userns->creator a kuid "Eric W. Beiderman
2012-04-18 18:48     ` Serge E. Hallyn
2012-04-20 22:58       ` Eric W. Biederman
     [not found]         ` <m1aa266meh.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-24 17:33           ` Serge E. Hallyn
     [not found]             ` <20120424173347.GA14017-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-24 19:41               ` Eric W. Biederman
     [not found]                 ` <m14ns8lxyc.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-24 20:23                   ` Serge E. Hallyn
2012-04-26  9:09                     ` Eric W. Biederman
     [not found]                       ` <m1ehradfl3.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-26 16:21                         ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 17/43] userns: Rework the user_namespace adding uid/gid mapping support "Eric W. Beiderman
     [not found]     ` <1333862139-31737-17-git-send-email-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2012-04-18 18:49       ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 18/43] userns: Convert group_info values from gid_t to kgid_t "Eric W. Beiderman
2012-04-18 18:49     ` Serge E. Hallyn [this message]
     [not found]       ` <20120418184936.GC4984-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-20 23:05         ` Eric W. Biederman
2012-04-08  5:15   ` [PATCH 19/43] userns: Store uid and gid values in struct cred with kuid_t and kgid_t types "Eric W. Beiderman
2012-04-18 18:49     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 20/43] userns: Replace user_ns_map_uid and user_ns_map_gid with from_kuid and from_kgid "Eric W. Beiderman
2012-04-18 18:49     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 22/43] userns: Convert capabilities related permsion checks "Eric W. Beiderman
2012-04-18 18:51     ` Serge E. Hallyn
     [not found]       ` <20120418185106.GG4984-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-20 23:18         ` Eric W. Biederman
2012-04-08  5:15   ` [PATCH 23/43] userns: Convert setting and getting uid and gid system calls to use kuid and kgid "Eric W. Beiderman
     [not found]     ` <1333862139-31737-23-git-send-email-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2012-04-26 16:20       ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 24/43] userns: Convert ptrace, kill, set_priority permission checks to work with kuids and kgids "Eric W. Beiderman
2012-04-18 18:56     ` Serge E. Hallyn
     [not found]       ` <20120418185610.GA5186-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-20 23:51         ` Eric W. Biederman
2012-04-08  5:15   ` [PATCH 25/43] userns: Store uid and gid types in vfs structures with kuid_t and kgid_t types "Eric W. Beiderman
2012-04-18 18:57     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 26/43] userns: Convert in_group_p and in_egroup_p to use kgid_t "Eric W. Beiderman
2012-04-18 18:58     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 28/43] userns: Convert user specfied uids and gids in chown into kuids and kgid "Eric W. Beiderman
     [not found]     ` <1333862139-31737-28-git-send-email-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2012-04-18 19:03       ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 29/43] userns: Convert stat to return values mapped from kuids and kgids "Eric W. Beiderman
2012-04-18 19:03     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 30/43] userns: Fail exec for suid and sgid binaries with ids outside our user namespace "Eric W. Beiderman
2012-04-18 19:05     ` Serge E. Hallyn
2012-04-18 19:09     ` Serge E. Hallyn
     [not found]       ` <20120418190927.GK5186-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-24  2:28         ` Eric W. Biederman
     [not found]           ` <m1ehrdrhgr.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-24 15:10             ` Serge Hallyn
2012-04-08  5:15   ` [PATCH 31/43] userns: Teach inode_capable to understand inodes whose uids map to other namespaces "Eric W. Beiderman
     [not found]     ` <1333862139-31737-31-git-send-email-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2012-04-18 19:06       ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 32/43] userns: signal remove unnecessary map_cred_ns "Eric W. Beiderman
2012-04-18 19:07     ` Serge E. Hallyn
2012-04-08  5:15   ` [PATCH 33/43] userns: Convert binary formats to use kuid/kgid where appropriate "Eric W. Beiderman
2012-04-18 19:10     ` Serge E. Hallyn
2012-04-24  2:44       ` Eric W. Biederman
2012-04-08  5:15   ` [PATCH 34/43] userns: Convert devpts " "Eric W. Beiderman
2012-04-08  5:15   ` [PATCH 35/43] userns: Convert ext2 " "Eric W. Beiderman
2012-05-11 23:20   ` Please include user-namespace.git in linux-next Eric W. Biederman
     [not found]     ` <m1likyz4mh.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-05-13 23:35       ` Stephen Rothwell
2012-04-08  5:15 ` [PATCH 27/43] userns: Use uid_eq gid_eq helpers when comparing kuids and kgids in the vfs "Eric W. Beiderman
     [not found]   ` <1333862139-31737-27-git-send-email-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2012-04-18 19:02     ` Serge E. Hallyn
2012-04-21  0:05       ` Eric W. Biederman
2012-04-18 19:03     ` Serge E. Hallyn
     [not found]       ` <20120418190337.GE5186-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-21  0:58         ` Eric W. Biederman
2012-04-24 17:41           ` Serge E. Hallyn
     [not found]           ` <m1sjfx2950.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-26  0:11             ` Serge E. Hallyn
     [not found]               ` <20120426001101.GA10308-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2012-04-26  5:33                 ` Eric W. Biederman
2012-04-08  5:15 ` [PATCH 36/43] userns: Convert ext3 to use kuid/kgid where appropriate "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 37/43] userns: Convert ext4 to user " "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 38/43] userns: Convert proc to use " "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 39/43] userns: Convert sysctl permission checks to use kuid and kgids "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 40/43] userns: Convert sysfs to use kgid/kuid where appropriate "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 41/43] userns: Convert tmpfs to use kuid and kgid " "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 42/43] userns: Convert cgroup permission checks to use uid_eq "Eric W. Beiderman
2012-04-08  5:15 ` [PATCH 43/43] userns: Convert the move_pages, and migrate_pages " "Eric W. Beiderman
2012-04-08 14:54 ` [REVIEW][PATCH 0/43] Completing the user namespace Serge Hallyn
2012-04-08 17:40 ` richard -rw- weinberger
     [not found]   ` <CAFLxGvwyx6S6+eZtR=UNSQe_O+W7oZW=GosseL54HGpjtYGXjg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-08 21:30     ` Eric W. Biederman
     [not found]       ` <m1iph9ewsy.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2012-04-08 22:04         ` richard -rw- weinberger
2012-04-08 22:52           ` Eric W. Biederman
2012-04-10 19:01 ` Andy Lutomirski
2012-04-10 21:59   ` Eric W. Biederman
2012-04-10 22:15     ` Andrew Lutomirski
2012-04-10 23:01       ` Markus Gutschke
2012-04-11  0:04         ` Eric W. Biederman
2012-04-10 23:50       ` Eric W. Biederman
2012-04-10 23:56         ` Andrew Lutomirski
2012-04-11  1:01           ` Eric W. Biederman
2012-04-11  1:00             ` Andrew Lutomirski
2012-04-11  1:14               ` Eric W. Biederman
2012-04-11  1:22                 ` Andrew Lutomirski
2012-04-11  4:37                 ` Serge Hallyn
2012-04-11  4:33             ` Serge Hallyn
2012-04-11  4:16         ` Serge 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=20120418184936.GC4984@mail.hallyn.com \
    --to=serge@hallyn.com \
    --cc=akpm@linux-foundation.org \
    --cc=containers@lists.linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=gorcunov@openvz.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@ZenIV.linux.org.uk \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).