svn commit: r253608 - stable/9/sys/fs/nfs
Rick Macklem
rmacklem at FreeBSD.org
Wed Jul 24 10:46:32 UTC 2013
Author: rmacklem
Date: Wed Jul 24 10:46:32 2013
New Revision: 253608
URL: http://svnweb.freebsd.org/changeset/base/253608
Log:
MFC: r253506
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: a.heider at gmail.com (Andre Heider)
Approved by: re (Xin Li)
Modified:
stable/9/sys/fs/nfs/nfs_commonsubs.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/fs/ (props changed)
Modified: stable/9/sys/fs/nfs/nfs_commonsubs.c
==============================================================================
--- stable/9/sys/fs/nfs/nfs_commonsubs.c Wed Jul 24 10:12:50 2013 (r253607)
+++ stable/9/sys/fs/nfs/nfs_commonsubs.c Wed Jul 24 10:46:32 2013 (r253608)
@@ -742,21 +742,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:
More information about the svn-src-stable-9
mailing list