nfsd: fix encode_entryplus_baggage stack usage
[pandora-kernel.git] / fs / nfsd / nfs3xdr.c
index 14d9ecb..de6e39e 100644 (file)
@@ -168,7 +168,7 @@ encode_fattr3(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp,
              struct kstat *stat)
 {
        *p++ = htonl(nfs3_ftypes[(stat->mode & S_IFMT) >> 12]);
-       *p++ = htonl((u32) stat->mode);
+       *p++ = htonl((u32) (stat->mode & S_IALLUGO));
        *p++ = htonl((u32) stat->nlink);
        *p++ = htonl((u32) from_kuid(&init_user_ns, stat->uid));
        *p++ = htonl((u32) from_kgid(&init_user_ns, stat->gid));
@@ -842,21 +842,21 @@ out:
 
 static __be32 *encode_entryplus_baggage(struct nfsd3_readdirres *cd, __be32 *p, const char *name, int namlen)
 {
-       struct svc_fh   fh;
+       struct svc_fh   *fh = &cd->scratch;
        __be32 err;
 
-       fh_init(&fh, NFS3_FHSIZE);
-       err = compose_entry_fh(cd, &fh, name, namlen);
+       fh_init(fh, NFS3_FHSIZE);
+       err = compose_entry_fh(cd, fh, name, namlen);
        if (err) {
                *p++ = 0;
                *p++ = 0;
                goto out;
        }
-       p = encode_post_op_attr(cd->rqstp, p, &fh);
+       p = encode_post_op_attr(cd->rqstp, p, fh);
        *p++ = xdr_one;                 /* yes, a file handle follows */
-       p = encode_fh(p, &fh);
+       p = encode_fh(p, fh);
 out:
-       fh_put(&fh);
+       fh_put(fh);
        return p;
 }