summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2013-12-24 00:48:39 +0000
committerrmacklem <rmacklem@FreeBSD.org>2013-12-24 00:48:39 +0000
commit4c7a9b47dc3da58db48d2bbf450cc238a7b30950 (patch)
treeb50fd5e0100ceb506d4e29ba1d70947f14cfcd47 /sys/fs
parent1c629a8317b4eec23f4fd1b14b9fca7a8062462f (diff)
downloadFreeBSD-src-4c7a9b47dc3da58db48d2bbf450cc238a7b30950.zip
FreeBSD-src-4c7a9b47dc3da58db48d2bbf450cc238a7b30950.tar.gz
The NFSv4 client was passing both the p and cred arguments to
nfsv4_fillattr() as NULLs for the Getattr callback. This caused nfsv4_fillattr() to not fill in the Change attribute for the reply. I believe this was a violation of the RFC, but had little effect on server behaviour. This patch passes a non-NULL p argument to fix this. MFC after: 1 week
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/nfs/nfs_commonsubs.c7
-rw-r--r--sys/fs/nfsclient/nfs_clstate.c2
2 files changed, 7 insertions, 2 deletions
diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c
index 0ee06bd..11833438 100644
--- a/sys/fs/nfs/nfs_commonsubs.c
+++ b/sys/fs/nfs/nfs_commonsubs.c
@@ -2011,7 +2011,12 @@ nfsv4_fillattr(struct nfsrv_descript *nd, struct mount *mp, vnode_t vp,
* First, set the bits that can be filled and get fsinfo.
*/
NFSSET_ATTRBIT(retbitp, attrbitp);
- /* If p and cred are NULL, it is a client side call */
+ /*
+ * If both p and cred are NULL, it is a client side setattr call.
+ * If both p and cred are not NULL, it is a server side reply call.
+ * If p is not NULL and cred is NULL, it is a client side callback
+ * reply call.
+ */
if (p == NULL && cred == NULL) {
NFSCLRNOTSETABLE_ATTRBIT(retbitp);
aclp = saclp;
diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index b378b8c..5fa302f 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -3279,7 +3279,7 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p)
FREE((caddr_t)nfhp, M_NFSFH);
if (!error)
(void) nfsv4_fillattr(nd, NULL, NULL, NULL, &va,
- NULL, 0, &rattrbits, NULL, NULL, 0, 0, 0, 0,
+ NULL, 0, &rattrbits, NULL, p, 0, 0, 0, 0,
(uint64_t)0);
break;
case NFSV4OP_CBRECALL:
OpenPOWER on IntegriCloud