⬢ DragonFlyBSD Kernel Audit
DF-2861 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/subr_sglist.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/kern/subr_sglist.c	2026-10-26 00:25:42.777043079 +0000
@@ -124,6 +124,10 @@
 	offset = vaddr & PAGE_MASK;
 	if (pmap != NULL) {
 		paddr = pmap_extract(pmap, vaddr, &handle);
+		if (paddr == 0) {
+			pmap_extract_done(handle);
+			return (EFAULT);
+		}
 	} else {
 		paddr = pmap_kextract(vaddr);
 		handle = NULL;
@@ -152,6 +156,10 @@
 		seglen = MIN(len, PAGE_SIZE);
 		if (pmap != NULL) {
 			paddr = pmap_extract(pmap, vaddr, &handle);
+			if (paddr == 0) {
+				pmap_extract_done(handle);
+				return (EFAULT);
+			}
 			error = _sglist_append_range(sg, &ss, paddr, seglen);
 			pmap_extract_done(handle);
 		} else {