⬢ DragonFlyBSD Kernel Audit
DF-5667 / fix.diff
← back to finding ↓ download raw
--- a/sys/platform/vkernel64/platform/globaldata.c
+++ b/sys/platform/vkernel64/platform/globaldata.c
@@ -79,11 +79,13 @@ cpu_gdinit(struct mdglobaldata *gd, int cpu)
 	*(void **)gd->mi.gd_idlethread.td_sp = cpu_idle_restore;
 }

+/*
+ * Only slots for CPUs that were actually brought online have backing
+ * pages.  The KVA window [CPU_prvspace, CPU_prvspace+SMP_MAXCPU) is
+ * merely *reserved* (init.c init_globaldata()/mp.c start_all_aps() map
+ * only ncpus slots), so do not bless the unmapped remainder.
+ */
 int
 is_globaldata_space(vm_offset_t saddr, vm_offset_t eaddr)
 {
 	if (saddr >= (vm_offset_t)&CPU_prvspace[0] &&
-	    eaddr <= (vm_offset_t)&CPU_prvspace[MAXCPU]) {
+	    eaddr <= (vm_offset_t)&CPU_prvspace[ncpus]) {
 		return (TRUE);
 	}
 	return (FALSE);