⬢ DragonFlyBSD Kernel Audit
DF-2825 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/kern_lockf.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/kern/kern_lockf.c	2026-10-26 00:25:42.777043079 +0000
@@ -228,7 +228,14 @@
 		flags |= F_NOEND;
 		end = LLONG_MAX;
 	} else if (fl->l_len < 0) {
-		return(EINVAL);
+		/*
+		 * POSIX.1-2008: a negative length means the byte range
+		 * [l_start + l_len, l_start - 1].
+		 */
+		end = start - 1;
+		start = start + fl->l_len;
+		if (start < 0)
+			return(EINVAL);
 	} else {
 		end = start + fl->l_len - 1;
 		if (end < start)