projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[firefly-linux-kernel-4.4.55.git]
/
net
/
sunrpc
/
auth_unix.c
diff --git
a/net/sunrpc/auth_unix.c
b/net/sunrpc/auth_unix.c
index 52c5abdee211cde762075809a09ca2d849ddeca3..dc37021fc3e5c96c87a35e902a382562d47bfa02 100644
(file)
--- a/
net/sunrpc/auth_unix.c
+++ b/
net/sunrpc/auth_unix.c
@@
-18,8
+18,8
@@
struct unx_cred {
struct rpc_cred uc_base;
struct unx_cred {
struct rpc_cred uc_base;
-
gid_t
uc_gid;
-
gid_t
uc_gids[NFS_NGROUPS];
+
kgid_t
uc_gid;
+
kgid_t
uc_gids[NFS_NGROUPS];
};
#define uc_uid uc_base.cr_uid
};
#define uc_uid uc_base.cr_uid
@@
-65,7
+65,8
@@
unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
unsigned int i;
dprintk("RPC: allocating UNIX cred for uid %d gid %d\n",
unsigned int i;
dprintk("RPC: allocating UNIX cred for uid %d gid %d\n",
- acred->uid, acred->gid);
+ from_kuid(&init_user_ns, acred->uid),
+ from_kgid(&init_user_ns, acred->gid));
if (!(cred = kmalloc(sizeof(*cred), GFP_NOFS)))
return ERR_PTR(-ENOMEM);
if (!(cred = kmalloc(sizeof(*cred), GFP_NOFS)))
return ERR_PTR(-ENOMEM);
@@
-79,13
+80,10
@@
unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags)
groups = NFS_NGROUPS;
cred->uc_gid = acred->gid;
groups = NFS_NGROUPS;
cred->uc_gid = acred->gid;
- 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;
- }
+ for (i = 0; i < groups; i++)
+ cred->uc_gids[i] = GROUP_AT(acred->group_info, i);
if (i < NFS_NGROUPS)
if (i < NFS_NGROUPS)
- cred->uc_gids[i] =
NOGROUP
;
+ cred->uc_gids[i] =
INVALID_GID
;
return &cred->uc_base;
}
return &cred->uc_base;
}
@@
-123,21
+121,17
@@
unx_match(struct auth_cred *acred, struct rpc_cred *rcred, int flags)
unsigned int i;
unsigned int i;
- if (
cred->uc_uid != acred->uid || cred->uc_gid != acred->gid
)
+ if (
!uid_eq(cred->uc_uid, acred->uid) || !gid_eq(cred->uc_gid, acred->gid)
)
return 0;
if (acred->group_info != NULL)
groups = acred->group_info->ngroups;
if (groups > NFS_NGROUPS)
groups = NFS_NGROUPS;
return 0;
if (acred->group_info != NULL)
groups = acred->group_info->ngroups;
if (groups > NFS_NGROUPS)
groups = NFS_NGROUPS;
- 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)
+ for (i = 0; i < groups ; i++)
+ if (!gid_eq(cred->uc_gids[i], GROUP_AT(acred->group_info, i)))
return 0;
return 0;
- }
- if (groups < NFS_NGROUPS &&
- cred->uc_gids[groups] != NOGROUP)
+ if (groups < NFS_NGROUPS && gid_valid(cred->uc_gids[groups]))
return 0;
return 1;
}
return 0;
return 1;
}
@@
-163,11
+157,11
@@
unx_marshal(struct rpc_task *task, __be32 *p)
*/
p = xdr_encode_array(p, clnt->cl_nodename, clnt->cl_nodelen);
*/
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++;
hold = p++;
- for (i = 0; i < 16 &&
cred->uc_gids[i] != (gid_t) NOGROUP
; i++)
- *p++ = htonl((u32)
cred->uc_gids[i]
);
+ for (i = 0; i < 16 &&
gid_valid(cred->uc_gids[i])
; 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 */
*hold = htonl(p - hold - 1); /* gid array length */
*base = htonl((p - base - 1) << 2); /* cred length */