DragonFlyBSD Kernel Audit
DF-0796 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/vfs/hammer2/hammer2_inode.c b/sys/vfs/hammer2/hammer2_inode.c
--- a/sys/vfs/hammer2/hammer2_inode.c
+++ b/sys/vfs/hammer2/hammer2_inode.c
@@ -448,6 +448,17 @@
 		}
 
 		/*
+		 * No chain at this cluster slot (interior gap, e.g. a degraded
+		 * slave whose type was reset to HAMMER2_PFSTYPE_NONE in
+		 * hammer2_vfsops.c).  Mirror hammer2_inode_chain() semantics and
+		 * return NULL instead of dereferencing chain->parent below.
+		 */
+		if (chain == NULL) {
+			*parentp = NULL;
+			return NULL;
+		}
+
+		/*
 		 * Get parent, lock order must be (parent, chain).
 		 */
 		parent = chain->parent;