DragonFlyBSD Kernel Audit
DF-1964 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/dm/delay/dm_target_delay.c b/sys/dev/disk/dm/delay/dm_target_delay.c
--- a/sys/dev/disk/dm/delay/dm_target_delay.c
+++ b/sys/dev/disk/dm/delay/dm_target_delay.c
@@ -112,6 +112,9 @@
 
 	ret = _init(&tdc->write, argv, 1);
 	if (ret) {
+		/* Tear down the read worker thread that _init(&tdc->read,...)
+		 * already started; otherwise it would tsleep on a freed di. */
+		_destroy(&tdc->read);
 		dm_pdev_decr(tdc->read.pdev);
 		kfree(tdc, M_DMDELAY);
 		return ret;