--- 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);