DragonFlyBSD Kernel Audit
DF-0598 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/netproto/smb/smb_conn.c b/sys/netproto/smb/smb_conn.c
--- a/sys/netproto/smb/smb_conn.c
+++ b/sys/netproto/smb/smb_conn.c
@@ -135,8 +135,10 @@
 	SMBCO_FOREACH(scp, &smb_vclist) {
 		vcp = (struct smb_vc *)scp;
 		error = smb_vc_lock(vcp, LK_EXCLUSIVE);
-		if (error)
+		if (error) {
+			vcp = NULL;
 			continue;
+		}
 
 		error = 1;
 		if ((vcp->obj.co_flags & SMBV_PRIVATE) ||
@@ -171,8 +173,9 @@
 		break;
 unlock:
 		smb_vc_unlock(vcp, 0);
+		vcp = NULL;
 	}
-	if (vcp) {
+	if (error == 0 && vcp) {
 		smb_vc_ref(vcp);
 		*vcpp = vcp;
 	}