⬢ DragonFlyBSD Kernel Audit
DF-5430 / fix.diff
← back to finding ↓ download raw
--- a/sys/platform/pc64/acpica/acpi_madt.c
+++ b/sys/platform/pc64/acpica/acpi_madt.c
@@ -372,7 +372,12 @@
 	if (error)
 		panic("madt_iterate_entries(pass2) failed");
 
-	KKASSERT(arg.bsp_found);
+	if (!arg.bsp_found) {
+		kprintf("ACPI MADT: no enabled BSP entry for apic id %d\n",
+		    bsp_apic_id);
+		sdt_sdth_unmap(&madt->Header);
+		return EINVAL;
+	}
 	naps = arg.cpu - 1; /* exclude BSP */
 	kprintf("ACPI CPUS = %d\n", arg.cpu);
 
@@ -496,6 +501,7 @@
 {
 	vm_paddr_t lapic_addr = 0;
 	int bsp_apic_id;
+	int error;
 
 	KKASSERT(madt_phyaddr != 0);
 
@@ -542,8 +548,9 @@
 		return EINVAL;
 	}
 
-	if (madt_lapic_pass2(bsp_apic_id))
-		panic("madt_lapic_enumerate: madt_lapic_pass2 failed");
+	error = madt_lapic_pass2(bsp_apic_id);
+	if (error)
+		return error; /* lapic_config() tries the next enumerator */
 
 	return 0;
 }