DragonFlyBSD Kernel Audit
DF-2649 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/hammer2/hammer2_bulkfree.c
+++ b/sys/vfs/hammer2/hammer2_bulkfree.c
@@ -138,6 +138,19 @@
 	}
 
 	/*
+	 * DF-2649: a pure I/O error while resolving the parent leaves
+	 * chain->data == NULL with a non-CHECK error (and a zero data_off
+	 * can leave it NULL with no error at all).  We can neither
+	 * traverse nor print such a chain - its block table was never
+	 * read - so skip it instead of dereferencing parent->data in the
+	 * PFSROOT kprintf()s below.
+	 */
+	if (parent->data == NULL) {
+		error = parent->error | HAMMER2_ERROR_EIO;
+		goto done;
+	}
+
+	/*
 	 * Report which PFS is being scanned
 	 */
 	if (parent->bref.type == HAMMER2_BREF_TYPE_INODE &&