diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2013-02-02 01:57:30 -0800 | 
|---|---|---|
| committer | Eric W. Biederman <ebiederm@xmission.com> | 2013-02-13 06:15:23 -0800 | 
| commit | 9e469e30d712b54cd3ff4a82d4dd5510522b8f16 (patch) | |
| tree | e3bf5401b2489973a0b7f10e1f555f24e07f0341 /net/sunrpc/svcauth_unix.c | |
| parent | 683428fae8c73d7d7da0fa2e0b6beb4d8df4e808 (diff) | |
| download | olio-linux-3.10-9e469e30d712b54cd3ff4a82d4dd5510522b8f16.tar.xz olio-linux-3.10-9e469e30d712b54cd3ff4a82d4dd5510522b8f16.zip  | |
sunrpc: Hash uids by first computing their value in the initial userns
In svcauth_unix introduce a helper unix_gid_hash as otherwise the
expresion to generate the hash value is just too long.
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'net/sunrpc/svcauth_unix.c')
| -rw-r--r-- | net/sunrpc/svcauth_unix.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c index 92166b57ec7..faf17195a9f 100644 --- a/net/sunrpc/svcauth_unix.c +++ b/net/sunrpc/svcauth_unix.c @@ -419,6 +419,11 @@ struct unix_gid {  	struct group_info	*gi;  }; +static int unix_gid_hash(kuid_t uid) +{ +	return hash_long(from_kuid(&init_user_ns, uid), GID_HASHBITS); +} +  static void unix_gid_put(struct kref *kref)  {  	struct cache_head *item = container_of(kref, struct cache_head, ref); @@ -530,7 +535,7 @@ static int unix_gid_parse(struct cache_detail *cd,  		ug.h.expiry_time = expiry;  		ch = sunrpc_cache_update(cd,  					 &ug.h, &ugp->h, -					 hash_long(uid, GID_HASHBITS)); +					 unix_gid_hash(uid));  		if (!ch)  			err = -ENOMEM;  		else { @@ -621,7 +626,7 @@ static struct unix_gid *unix_gid_lookup(struct cache_detail *cd, kuid_t uid)  	struct cache_head *ch;  	ug.uid = uid; -	ch = sunrpc_cache_lookup(cd, &ug.h, hash_long(uid, GID_HASHBITS)); +	ch = sunrpc_cache_lookup(cd, &ug.h, unix_gid_hash(uid));  	if (ch)  		return container_of(ch, struct unix_gid, h);  	else  |