DragonFlyBSD Kernel Audit
DF-1570 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/xdisk/xdisk.c b/sys/dev/disk/xdisk/xdisk.c
--- a/sys/dev/disk/xdisk/xdisk.c
+++ b/sys/dev/disk/xdisk/xdisk.c
@@ -766,10 +766,12 @@
 
 	lockmgr(&xdisk_lk, LK_EXCLUSIVE);
 	sc = dev->si_drv1;
-	if (sc == NULL)
+	if (sc == NULL) {
+		lockmgr(&xdisk_lk, LK_RELEASE);
 		return ENXIO;	/* raced destruction */
+	}
 	if (sc->terminating) {
-		lockmgr(&sc->lk, LK_RELEASE);
+		lockmgr(&xdisk_lk, LK_RELEASE);
 		return ENXIO;	/* raced destruction */
 	}
 	lockmgr(&sc->lk, LK_EXCLUSIVE);