nfsd: Modify nfsd4_cb_sec to use kuids and kgids
authorEric W. Biederman <ebiederm@xmission.com>
Sat, 2 Feb 2013 14:24:49 +0000 (06:24 -0800)
committerEric W. Biederman <ebiederm@xmission.com>
Wed, 13 Feb 2013 14:16:07 +0000 (06:16 -0800)
Change uid and gid in struct nfsd4_cb_sec to be of type kuid_t and
kgid_t.

In nfsd4_decode_cb_sec when reading uids and gids off the wire convert
them to kuids and kgids, and if they don't convert to valid kuids or
valid kuids ignore RPC_AUTH_UNIX and don't fill in any of the fields.

Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/nfsd/nfs4xdr.c
fs/nfsd/state.h

index 3812b06..2d1d06b 100644 (file)
@@ -464,9 +464,16 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_
                        READ32(dummy);
                        READ_BUF(dummy * 4);
                        if (cbs->flavor == (u32)(-1)) {
-                               cbs->uid = uid;
-                               cbs->gid = gid;
-                               cbs->flavor = RPC_AUTH_UNIX;
+                               kuid_t kuid = make_kuid(&init_user_ns, uid);
+                               kgid_t kgid = make_kgid(&init_user_ns, gid);
+                               if (uid_valid(kuid) && gid_valid(kgid)) {
+                                       cbs->uid = kuid;
+                                       cbs->gid = kgid;
+                                       cbs->flavor = RPC_AUTH_UNIX;
+                               } else {
+                                       dprintk("RPC_AUTH_UNIX with invalid"
+                                               "uid or gid ignoring!\n");
+                               }
                        }
                        break;
                case RPC_AUTH_GSS:
index d1c229f..1a8c739 100644 (file)
@@ -152,8 +152,8 @@ struct nfsd4_channel_attrs {
 
 struct nfsd4_cb_sec {
        u32     flavor; /* (u32)(-1) used to mean "no valid flavor" */
-       u32     uid;
-       u32     gid;
+       kuid_t  uid;
+       kgid_t  gid;
 };
 
 struct nfsd4_create_session {