sunrpc: Properly encode kuids and kgids in RPC_AUTH_UNIX credentials
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 2 Feb 2013 10:45:08 +0000 (02:45 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:15:24 +0000 (06:15 -0800)
When writing kuids onto the wire first map them into the initial user
namespace.

When writing kgids onto the wire first map them into the initial user
namespace.

Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
net/sunrpc/auth_unix.c

index c434fde..dc37021 100644 (file)
@@ -157,11 +157,11 @@ unx_marshal(struct rpc_task *task, __be32 *p)
         */
        p = xdr_encode_array(p, clnt->cl_nodename, clnt->cl_nodelen);
 
-       *p++ = htonl((u32) cred->uc_uid);
-       *p++ = htonl((u32) cred->uc_gid);
+       *p++ = htonl((u32) from_kuid(&init_user_ns, cred->uc_uid));
+       *p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gid));
        hold = p++;
        for (i = 0; i < 16 && gid_valid(cred->uc_gids[i]); i++)
-               *p++ = htonl((u32) cred->uc_gids[i]);
+               *p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gids[i]));
        *hold = htonl(p - hold - 1);            /* gid array length */
        *base = htonl((p - base - 1) << 2);     /* cred length */