DragonFlyBSD Kernel Audit
DF-1477 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/agp/intel-gtt.c
+++ b/sys/dev/agp/intel-gtt.c
@@ -1255,8 +1255,10 @@
 	struct agp_i810_softc *sc;
 	vm_offset_t i;
 
-	/* Do some sanity checks first. */
-	if ((offset & (AGP_PAGE_SIZE - 1)) != 0 ||
+	/* Avoid 64-bit wraparound in offset + am_size. */
+	if (mem->am_size > AGP_GET_APERTURE(dev) ||
+	    offset > AGP_GET_APERTURE(dev) - mem->am_size ||
+	    (offset & (AGP_PAGE_SIZE - 1)) != 0 ||
 	    offset + mem->am_size > AGP_GET_APERTURE(dev)) {
 		device_printf(dev, "binding memory at bad offset %#x\n",
 		    (int)offset);