Merge branch 'nfsv4_xdr_cleanups-for-2.6.32' into nfs-for-2.6.32
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 19 Aug 2009 22:21:52 +0000 (18:21 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 19 Aug 2009 22:21:52 +0000 (18:21 -0400)
Conflicts:
fs/nfs/nfs4xdr.c

1  2 
Documentation/kernel-parameters.txt
fs/nfs/nfs4xdr.c
fs/nfs/write.c

Simple merge
@@@ -3073,10 -3143,12 +3143,13 @@@ static int decode_attr_nlink(struct xdr
        }
        dprintk("%s: nlink=%u\n", __func__, (unsigned int)*nlink);
        return ret;
+ out_overflow:
+       print_overflow_msg(__func__, xdr);
+       return -EIO;
  }
  
 -static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs_client *clp, uint32_t *uid)
 +static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap,
 +              struct nfs_client *clp, uint32_t *uid, int may_sleep)
  {
        uint32_t len;
        __be32 *p;
        if (unlikely(bitmap[1] & (FATTR4_WORD1_OWNER - 1U)))
                return -EIO;
        if (likely(bitmap[1] & FATTR4_WORD1_OWNER)) {
-               READ_BUF(4);
-               READ32(len);
-               READ_BUF(len);
+               p = xdr_inline_decode(xdr, 4);
+               if (unlikely(!p))
+                       goto out_overflow;
+               len = be32_to_cpup(p);
+               p = xdr_inline_decode(xdr, len);
+               if (unlikely(!p))
+                       goto out_overflow;
 -              if (len < XDR_MAX_NETOBJ) {
 +              if (!may_sleep) {
 +                      /* do nothing */
 +              } else if (len < XDR_MAX_NETOBJ) {
                        if (nfs_map_name_to_uid(clp, (char *)p, len, uid) == 0)
                                ret = NFS_ATTR_FATTR_OWNER;
                        else
        }
        dprintk("%s: uid=%d\n", __func__, (int)*uid);
        return ret;
+ out_overflow:
+       print_overflow_msg(__func__, xdr);
+       return -EIO;
  }
  
 -static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs_client *clp, uint32_t *gid)
 +static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap,
 +              struct nfs_client *clp, uint32_t *gid, int may_sleep)
  {
        uint32_t len;
        __be32 *p;
        if (unlikely(bitmap[1] & (FATTR4_WORD1_OWNER_GROUP - 1U)))
                return -EIO;
        if (likely(bitmap[1] & FATTR4_WORD1_OWNER_GROUP)) {
-               READ_BUF(4);
-               READ32(len);
-               READ_BUF(len);
+               p = xdr_inline_decode(xdr, 4);
+               if (unlikely(!p))
+                       goto out_overflow;
+               len = be32_to_cpup(p);
+               p = xdr_inline_decode(xdr, len);
+               if (unlikely(!p))
+                       goto out_overflow;
 -              if (len < XDR_MAX_NETOBJ) {
 +              if (!may_sleep) {
 +                      /* do nothing */
 +              } else if (len < XDR_MAX_NETOBJ) {
                        if (nfs_map_group_to_gid(clp, (char *)p, len, gid) == 0)
                                ret = NFS_ATTR_FATTR_GROUP;
                        else
diff --cc fs/nfs/write.c
Simple merge