diff options
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
| -rw-r--r-- | fs/nfsd/nfs4xdr.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 3de42a729093..52c4f6daa649 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -521,6 +521,7 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access  static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs)  {  	DECODE_HEAD; +	struct user_namespace *userns = nfsd_user_namespace(argp->rqstp);  	u32 dummy, uid, gid;  	char *machine_name;  	int i; @@ -563,8 +564,8 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_  			dummy = be32_to_cpup(p++);  			READ_BUF(dummy * 4);  			if (cbs->flavor == (u32)(-1)) { -				kuid_t kuid = make_kuid(&init_user_ns, uid); -				kgid_t kgid = make_kgid(&init_user_ns, gid); +				kuid_t kuid = make_kuid(userns, uid); +				kgid_t kgid = make_kgid(userns, gid);  				if (uid_valid(kuid) && gid_valid(kgid)) {  					cbs->uid = kuid;  					cbs->gid = kgid; @@ -2420,8 +2421,10 @@ nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,  	__be32 status;  	int err;  	struct nfs4_acl *acl = NULL; +#ifdef CONFIG_NFSD_V4_SECURITY_LABEL  	void *context = NULL;  	int contextlen; +#endif  	bool contextsupport = false;  	struct nfsd4_compoundres *resp = rqstp->rq_resp;  	u32 minorversion = resp->cstate.minorversion; @@ -2906,12 +2909,14 @@ out_acl:  			*p++ = cpu_to_be32(NFS4_CHANGE_TYPE_IS_TIME_METADATA);  	} +#ifdef CONFIG_NFSD_V4_SECURITY_LABEL  	if (bmval2 & FATTR4_WORD2_SECURITY_LABEL) {  		status = nfsd4_encode_security_label(xdr, rqstp, context,  								contextlen);  		if (status)  			goto out;  	} +#endif  	attrlen = htonl(xdr->buf->len - attrlen_offset - 4);  	write_bytes_to_xdr_buf(xdr->buf, attrlen_offset, &attrlen, 4);  |