From db65dd60fb11e3d38dbdd9a2e2f64d6ea7ef7576 Mon Sep 17 00:00:00 2001
From: Arthur Heymans <arthur@aheymans.xyz>
Date: Fri, 25 Nov 2022 13:36:26 +0100
Subject: cpu/x86/mp_init.c: Improve AP entry point

Make sure that a pointer exists before dereferencing it.

Change-Id: I1a9833bb9686451224249efe599346f64dc37874
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70011
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Elyes Haouas <ehaouas@noos.fr>
---
 src/cpu/x86/mp_init.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

(limited to 'src/cpu')

diff --git a/src/cpu/x86/mp_init.c b/src/cpu/x86/mp_init.c
index acc1323967..f00418547e 100644
--- a/src/cpu/x86/mp_init.c
+++ b/src/cpu/x86/mp_init.c
@@ -182,9 +182,16 @@ static asmlinkage void ap_init(unsigned int index)
 	enable_lapic();
 	setup_lapic_interrupts();
 
-	struct device *dev = g_cpu_bus->children;
-	for (unsigned int i = index; i > 0; i--)
-		dev = dev->sibling;
+	struct device *dev;
+	int i = 0;
+	for (dev = g_cpu_bus->children; dev; dev = dev->sibling)
+		if (i++ == index)
+			break;
+
+	if (!dev) {
+		printk(BIOS_ERR, "Could not find allocated device for index %u\n", index);
+		return;
+	}
 
 	set_cpu_info(index, dev);
 
-- 
cgit v1.2.3