svn commit: r363687 - projects/nfs-over-tls/sys/fs/nfsserver

Rick Macklem rmacklem at FreeBSD.org
Thu Jul 30 04:06:00 UTC 2020


Author: rmacklem
Date: Thu Jul 30 04:05:59 2020
New Revision: 363687
URL: https://svnweb.freebsd.org/changeset/base/363687

Log:
  Apply a fix to nfsvno_getxattr() that is already in head.

Modified:
  projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c
  projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c

Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c	Thu Jul 30 03:21:16 2020	(r363686)
+++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c	Thu Jul 30 04:05:59 2020	(r363687)
@@ -6359,21 +6359,28 @@ nfsvno_getxattr(struct vnode *vp, char *name, uint32_t
 		return (NFSERR_XATTR2BIG);
 	len = siz;
 	tlen = NFSM_RNDUP(len);
-	/*
-	 * If cnt > MCLBYTES and the reply will not be saved, use
-	 * ext_pgs mbufs for TLS.
-	 * For NFSv4.0, we do not know for sure if the reply will
-	 * be saved, so do not use ext_pgs mbufs for NFSv4.0.
-	 * Always use ext_pgs mbufs if ND_EXTPG is set.
-	 */
-	if ((flag & ND_EXTPG) != 0 || (tlen > MCLBYTES &&
-	    (flag & (ND_TLS | ND_SAVEREPLY)) == ND_TLS &&
-	    (flag & (ND_NFSV4 | ND_NFSV41)) != ND_NFSV4))
-		uiop->uio_iovcnt = nfsrv_createiovec_extpgs(tlen, maxextsiz,
-		    &m, &m2, &iv);
-	else
-		uiop->uio_iovcnt = nfsrv_createiovec(tlen, &m, &m2, &iv);
-	uiop->uio_iov = iv;
+	if (tlen > 0) {
+		/*
+		 * If cnt > MCLBYTES and the reply will not be saved, use
+		 * ext_pgs mbufs for TLS.
+		 * For NFSv4.0, we do not know for sure if the reply will
+		 * be saved, so do not use ext_pgs mbufs for NFSv4.0.
+		 * Always use ext_pgs mbufs if ND_EXTPG is set.
+		 */
+		if ((flag & ND_EXTPG) != 0 || (tlen > MCLBYTES &&
+		    (flag & (ND_TLS | ND_SAVEREPLY)) == ND_TLS &&
+		    (flag & (ND_NFSV4 | ND_NFSV41)) != ND_NFSV4))
+			uiop->uio_iovcnt = nfsrv_createiovec_extpgs(tlen,
+			    maxextsiz, &m, &m2, &iv);
+		else
+			uiop->uio_iovcnt = nfsrv_createiovec(tlen, &m, &m2,
+			    &iv);
+		uiop->uio_iov = iv;
+	} else {
+		uiop->uio_iovcnt = 0;
+		uiop->uio_iov = iv = NULL;
+		m = m2 = NULL;
+	}
 	uiop->uio_offset = 0;
 	uiop->uio_resid = tlen;
 	uiop->uio_rw = UIO_READ;

Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c	Thu Jul 30 03:21:16 2020	(r363686)
+++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c	Thu Jul 30 04:05:59 2020	(r363687)
@@ -5611,7 +5611,7 @@ nfsrvd_getxattr(struct nfsrv_descript *nd, __unused in
 	if (nd->nd_repstat == 0) {
 		NFSM_BUILD(tl, uint32_t *, NFSX_UNSIGNED);
 		*tl = txdr_unsigned(len);
-		if (mp != NULL) {
+		if (len > 0) {
 			nd->nd_mb->m_next = mp;
 			nd->nd_mb = mpend;
 			if ((mpend->m_flags & M_EXTPG) != 0) {


More information about the svn-src-projects mailing list