⬢ DragonFlyBSD Kernel Audit
DF-3214 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/nfs/nfs_srvcache.c
+++ b/sys/vfs/nfs/nfs_srvcache.c
@@ -190,10 +190,16 @@ nfsrv_getcache(struct nfsrv_descript *nd, struct nfssvc_sock *slp,
 	loop:
 	for (rp = NFSRCHASH(nd->nd_retxid)->lh_first; rp != NULL;
 	     rp = rp->rc_hash.le_next) {
 	    if (nd->nd_retxid == rp->rc_xid && nd->nd_procnum == rp->rc_proc &&
-		netaddr_match(AF_INET, &rp->rc_haddr, nd->nd_nam)) {
+		((rp->rc_flag & RC_INETADDR) ?
+		 netaddr_match(AF_INET, &rp->rc_haddr, nd->nd_nam) :
+		 netaddr_match(nd->nd_nam->sa_family, &rp->rc_haddr,
+			       nd->nd_nam))) {
@@ -304,10 +310,16 @@ nfsrv_updatecache(struct nfsrv_descript *nd, int repvalid, struct mbuf *repmbuf)
 	loop:
 	for (rp = NFSRCHASH(nd->nd_retxid)->lh_first; rp != NULL;
 	     rp = rp->rc_hash.le_next) {
 	    if (nd->nd_retxid == rp->rc_xid && nd->nd_procnum == rp->rc_proc &&
-		netaddr_match(AF_INET, &rp->rc_haddr, nd->nd_nam)) {
+		((rp->rc_flag & RC_INETADDR) ?
+		 netaddr_match(AF_INET, &rp->rc_haddr, nd->nd_nam) :
+		 netaddr_match(nd->nd_nam->sa_family, &rp->rc_haddr,
+			       nd->nd_nam))) {