]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
NFSv4: Fix up decode_attr_filehandle() to handle the case of empty fh pointer
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 23 Oct 2010 19:34:20 +0000 (15:34 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 23 Oct 2010 19:34:20 +0000 (15:34 -0400)
decode_attr_filehandle still needs to skip the XDR-encoded filehandle if
someone passes a null pointer argument.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfs4xdr.c

index ccfb1c92b2624e53016f5486e637efc9ff7b4e67..a6b00e84bd1a1c38dac2a6d2990837fa9e9b3067 100644 (file)
@@ -2883,12 +2883,8 @@ static int decode_attr_filehandle(struct xdr_stream *xdr, uint32_t *bitmap, stru
        __be32 *p;
        int len;
 
-       if (fh == NULL) {
-               bitmap[0] &= ~FATTR4_WORD0_FILEHANDLE;
-               return 0;
-       }
-
-       memset(fh, 0, sizeof(*fh));
+       if (fh != NULL)
+               memset(fh, 0, sizeof(*fh));
 
        if (unlikely(bitmap[0] & (FATTR4_WORD0_FILEHANDLE - 1U)))
                return -EIO;
@@ -2899,11 +2895,13 @@ static int decode_attr_filehandle(struct xdr_stream *xdr, uint32_t *bitmap, stru
                len = be32_to_cpup(p);
                if (len > NFS4_FHSIZE)
                        return -EIO;
-               fh->size = len;
                p = xdr_inline_decode(xdr, len);
                if (unlikely(!p))
                        goto out_overflow;
-               memcpy(fh->data, p, len);
+               if (fh != NULL) {
+                       memcpy(fh->data, p, len);
+                       fh->size = len;
+               }
                bitmap[0] &= ~FATTR4_WORD0_FILEHANDLE;
        }
        return 0;