This is a note to let you know that I've just added the patch titled

    nfsd: fix compose_entry_fh() failure exits

to the 3.3-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     nfsd-fix-compose_entry_fh-failure-exits.patch
and it can be found in the queue-3.3 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From efe39651f08813180f37dc508d950fc7d92b29a8 Mon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Fri, 13 Apr 2012 00:32:14 -0400
Subject: nfsd: fix compose_entry_fh() failure exits

From: Al Viro <[email protected]>

commit efe39651f08813180f37dc508d950fc7d92b29a8 upstream.

Restore the original logics ("fail on mountpoints, negatives and in
case of fh_compose() failures").  Since commit 8177e (nfsd: clean up
readdirplus encoding) that got broken -
        rv = fh_compose(fhp, exp, dchild, &cd->fh);
        if (rv)
               goto out;
        if (!dchild->d_inode)
                goto out;
        rv = 0;
out:
is equivalent to
        rv = fh_compose(fhp, exp, dchild, &cd->fh);
out:
and the second check has no effect whatsoever...

Signed-off-by: Al Viro <[email protected]>
Cc: "J. Bruce Fields" <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 fs/nfsd/nfs3xdr.c |   22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

--- a/fs/nfsd/nfs3xdr.c
+++ b/fs/nfsd/nfs3xdr.c
@@ -803,13 +803,13 @@ encode_entry_baggage(struct nfsd3_readdi
        return p;
 }
 
-static int
+static __be32
 compose_entry_fh(struct nfsd3_readdirres *cd, struct svc_fh *fhp,
                const char *name, int namlen)
 {
        struct svc_export       *exp;
        struct dentry           *dparent, *dchild;
-       int rv = 0;
+       __be32 rv = nfserr_noent;
 
        dparent = cd->fh.fh_dentry;
        exp  = cd->fh.fh_export;
@@ -817,26 +817,20 @@ compose_entry_fh(struct nfsd3_readdirres
        if (isdotent(name, namlen)) {
                if (namlen == 2) {
                        dchild = dget_parent(dparent);
-                       if (dchild == dparent) {
-                               /* filesystem root - cannot return filehandle 
for ".." */
-                               dput(dchild);
-                               return -ENOENT;
-                       }
+                       /* filesystem root - cannot return filehandle for ".." 
*/
+                       if (dchild == dparent)
+                               goto out;
                } else
                        dchild = dget(dparent);
        } else
                dchild = lookup_one_len(name, dparent, namlen);
        if (IS_ERR(dchild))
-               return -ENOENT;
-       rv = -ENOENT;
+               return rv;
        if (d_mountpoint(dchild))
                goto out;
-       rv = fh_compose(fhp, exp, dchild, &cd->fh);
-       if (rv)
-               goto out;
        if (!dchild->d_inode)
                goto out;
-       rv = 0;
+       rv = fh_compose(fhp, exp, dchild, &cd->fh);
 out:
        dput(dchild);
        return rv;
@@ -845,7 +839,7 @@ out:
 static __be32 *encode_entryplus_baggage(struct nfsd3_readdirres *cd, __be32 
*p, const char *name, int namlen)
 {
        struct svc_fh   fh;
-       int err;
+       __be32 err;
 
        fh_init(&fh, NFS3_FHSIZE);
        err = compose_entry_fh(cd, &fh, name, namlen);


Patches currently in stable-queue which might be from [email protected] 
are

queue-3.3/ocfs2-l_next_free_req-breakage-on-big-endian.patch
queue-3.3/btrfs-btrfs_root_readonly-broken-on-big-endian.patch
queue-3.3/ext4-fix-endianness-breakage-in-ext4_split_extent_at.patch
queue-3.3/nfsd-fix-b0rken-error-value-for-setattr-on-read-only-mount.patch
queue-3.3/lockd-fix-the-endianness-bug.patch
queue-3.3/ocfs-rl_used-breakage-on-big-endian.patch
queue-3.3/ocfs2-rl_count-endianness-breakage.patch
queue-3.3/nfsd-fix-endianness-breakage-in-test_stateid-handling.patch
queue-3.3/nfsd-fix-compose_entry_fh-failure-exits.patch
queue-3.3/nfsd-fix-error-values-returned-by-nfsd4_lockt-when.patch
queue-3.3/ocfs2-e_leaf_clusters-endianness-breakage.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to