⬢ DragonFlyBSD Kernel Audit
DF-3249 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/ext2fs/ext2_subr.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/vfs/ext2fs/ext2_subr.c	2026-10-26 03:28:45.669473983 +0000
@@ -176,17 +176,21 @@
 	end = start - fs->e2fs_contigsumsize;
 	if (end < 0)
 		end = -1;
-	loc = start / NBBY;
-	bit = 1 << (start % NBBY);
-	for (i = start; i > end; i--) {
-		if ((bbp[loc] & bit) != 0)
-			break;
-		if ((i & (NBBY - 1)) != 0)
-			bit >>= 1;
-		else {
-			loc--;
-			bit = 1 << (NBBY - 1);
+	if (start >= 0) {
+		loc = start / NBBY;
+		bit = 1 << (start % NBBY);
+		for (i = start; i > end; i--) {
+			if ((bbp[loc] & bit) != 0)
+				break;
+			if ((i & (NBBY - 1)) != 0)
+				bit >>= 1;
+			else {
+				loc--;
+				bit = 1 << (NBBY - 1);
+			}
 		}
+	} else {
+		i = start;	/* bno == 0: nothing before bit 0 */
 	}
 	back = start - i;