Author: rmacklem
Date: Sat Jul 20 22:35:32 2013
New Revision: 253506
URL: http://svnweb.freebsd.org/changeset/base/253506

Log:
  The NFSv4 server incorrectly assumed that the high order words of
  the attribute bitmap argument would be non-zero. This caused an
  interoperability problem for a recent patch to the Linux NFSv4 client.
  The Linux folks have changed their patch to avoid this, but this
  patch fixes the problem on the server.
  
  Reported and tested by:       Andre Heider ([email protected])
  MFC after:    3 days

Modified:
  head/sys/fs/nfs/nfs_commonsubs.c

Modified: head/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- head/sys/fs/nfs/nfs_commonsubs.c    Sat Jul 20 16:58:17 2013        
(r253505)
+++ head/sys/fs/nfs/nfs_commonsubs.c    Sat Jul 20 22:35:32 2013        
(r253506)
@@ -761,21 +761,21 @@ nfsrv_getattrbits(struct nfsrv_descript 
                error = NFSERR_BADXDR;
                goto nfsmout;
        }
-       if (cnt > NFSATTRBIT_MAXWORDS) {
+       if (cnt > NFSATTRBIT_MAXWORDS)
                outcnt = NFSATTRBIT_MAXWORDS;
-               if (retnotsupp)
-                       *retnotsupp = NFSERR_ATTRNOTSUPP;
-       } else {
+       else
                outcnt = cnt;
-       }
        NFSZERO_ATTRBIT(attrbitp);
        if (outcnt > 0) {
                NFSM_DISSECT(tl, u_int32_t *, outcnt * NFSX_UNSIGNED);
                for (i = 0; i < outcnt; i++)
                        attrbitp->bits[i] = fxdr_unsigned(u_int32_t, *tl++);
        }
-       if (cnt > outcnt)
-               error = nfsm_advance(nd, (cnt - outcnt) * NFSX_UNSIGNED, -1);
+       for (i = 0; i < (cnt - outcnt); i++) {
+               NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
+               if (retnotsupp != NULL && *tl != 0)
+                       *retnotsupp = NFSERR_ATTRNOTSUPP;
+       }
        if (cntp)
                *cntp = NFSX_UNSIGNED + (cnt * NFSX_UNSIGNED);
 nfsmout:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to