aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs3xdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs3xdr.c')
-rw-r--r--fs/nfsd/nfs3xdr.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c
index 7af9417be88d..14d9ecb96cff 100644
--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -106,12 +106,14 @@ decode_sattr3(__be32 *p, struct iattr *iap)
106 iap->ia_mode = ntohl(*p++); 106 iap->ia_mode = ntohl(*p++);
107 } 107 }
108 if (*p++) { 108 if (*p++) {
109 iap->ia_valid |= ATTR_UID; 109 iap->ia_uid = make_kuid(&init_user_ns, ntohl(*p++));
110 iap->ia_uid = ntohl(*p++); 110 if (uid_valid(iap->ia_uid))
111 iap->ia_valid |= ATTR_UID;
111 } 112 }
112 if (*p++) { 113 if (*p++) {
113 iap->ia_valid |= ATTR_GID; 114 iap->ia_gid = make_kgid(&init_user_ns, ntohl(*p++));
114 iap->ia_gid = ntohl(*p++); 115 if (gid_valid(iap->ia_gid))
116 iap->ia_valid |= ATTR_GID;
115 } 117 }
116 if (*p++) { 118 if (*p++) {
117 u64 newsize; 119 u64 newsize;
@@ -168,8 +170,8 @@ encode_fattr3(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp,
168 *p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]); 170 *p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]);
169 *p++ = htonl((u32) stat->mode); 171 *p++ = htonl((u32) stat->mode);
170 *p++ = htonl((u32) stat->nlink); 172 *p++ = htonl((u32) stat->nlink);
171 *p++ = htonl((u32) nfsd_ruid(rqstp, stat->uid)); 173 *p++ = htonl((u32) from_kuid(&init_user_ns, stat->uid));
172 *p++ = htonl((u32) nfsd_rgid(rqstp, stat->gid)); 174 *p++ = htonl((u32) from_kgid(&init_user_ns, stat->gid));
173 if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) { 175 if (S_ISLNK(stat->mode) && stat->size > NFS3_MAXPATHLEN) {
174 p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN); 176 p = xdr_encode_hyper(p, (u64) NFS3_MAXPATHLEN);
175 } else { 177 } else {