⬢ DragonFlyBSD Kernel Audit
DF-3042 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/hammer/hammer_ondisk.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/vfs/hammer/hammer_ondisk.c	2026-10-26 03:28:07.221962165 +0000
@@ -207,6 +207,18 @@
 		error = EFTYPE;
 		goto late_failure;
 	}
+	/*
+	 * Verify the volume header CRC when one is recorded.  NOTE:
+	 * newfs_hammer historically leaves vol_crc zero; treat zero as
+	 * "not set" for compatibility and only enforce recorded CRCs.
+	 */
+	if (ondisk->vol_crc != 0 &&
+	    hammer_crc_test_volume(ondisk->vol_version, ondisk) == 0) {
+		hkprintf("volume %s has an invalid header CRC\n",
+			volume->vol_name);
+		error = EFTYPE;
+		goto late_failure;
+	}
 	volume->vol_no = ondisk->vol_no;
 	volume->vol_flags = ondisk->vol_flags;
 	volume->maxbuf_off = HAMMER_ENCODE_RAW_BUFFER(volume->vol_no,