⬢ DragonFlyBSD Kernel Audit
DF-3223 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/vfs/hammer/hammer_prune.c b/b/sys/vfs/hammer/hammer_prune.c
index 573f548..882d549 100644
--- a/sys/vfs/hammer/hammer_prune.c
+++ b/sys/vfs/hammer/hammer_prune.c
@@ -329,6 +329,13 @@ prune_check_nlinks(hammer_cursor_t cursor, hammer_btree_leaf_elm_t elm)
 		return;
 	if (hammer_btree_extract_data(cursor))
 		return;
+	/*
+	 * A leaf record with data_offset == 0 (possible on a corrupted
+	 * or forged filesystem image) extracts successfully with
+	 * cursor->data left NULL by hammer_btree_extract().
+	 */
+	if (cursor->data == NULL)
+		return;
 	if (cursor->data->inode.nlinks)
 		return;
 	hammer_cursor_downgrade(cursor);