[PATCH v9 12/19] arm64: acpi: Harden get_cpu_for_acpi_id() against missing CPU entry

Jonathan Cameron
2024-04-30T14:30:47Z

In a review discussion of the changes to support vCPU hotplug where
a check was added on the GICC being enabled if was was online, it was
noted that there is need to map back to the cpu and use that to index
into a cpumask. As such, a valid ID is needed.

If an MPIDR check fails in acpi_map_gic_cpu_interface() it is possible
for the entry in cpu_madt_gicc[cpu] == NULL. This function would
then cause a NULL pointer dereference. Whilst a path to trigger
this has not been established, harden this caller against the
possibility.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
v9: New patch in response to a question from Marc Zyngier.
Taking the easy way out - harden against a possible condition rather
than establishing it never happens!
---
arch/arm64/include/asm/acpi.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
index bc9a6656fc0c..a407f9cd549e 100644
--- a/arch/arm64/include/asm/acpi.h
+++ b/arch/arm64/include/asm/acpi.h
@@ -124,7 +124,8 @@ static inline int get_cpu_for_acpi_id(u32 uid)
int cpu;

for (cpu = 0; cpu < nr_cpu_ids; cpu++)
- if (uid == get_acpi_id_for_cpu(cpu))
+ if (acpi_cpu_get_madt_gicc(cpu) &&
+ uid == get_acpi_id_for_cpu(cpu))
return cpu;

return -EINVAL;
--
2.39.2