[PATCH] x86/acpi: Prevent X2APIC id 0xffffffff from being accounted

From: Dou Liyang
Date: Wed Apr 11 2018 - 21:41:12 EST


RongQing reported that there are some X2APIC id 0xffffffff in his machine's
ACPI MADT table, which made the number of possible CPU inaccuracy.

The reason is that the ACPI X2APIC parser has no sanity check for
apicid 0xffffffff, which is an invalid id in all APIC types. See
"Intel 64 Architecture x2APIC Specification", Chapter 2.4.1.

Add a sanity check to acpi_parse_x2apic() which ignores the invalid id.

Reported-by: Li RongQing <lirongqing@xxxxxxxxx>
Signed-off-by: Dou Liyang <douly.fnst@xxxxxxxxxxxxxx>
---
arch/x86/kernel/acpi/boot.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index dde444f932c1..3b20607d581b 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -215,6 +215,10 @@ acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
apic_id = processor->local_apic_id;
enabled = processor->lapic_flags & ACPI_MADT_ENABLED;

+ /* Ignore invalid ID */
+ if (apic_id == 0xffffffff)
+ return 0;
+
/*
* We need to register disabled CPU as well to permit
* counting disabled CPUs. This allows us to size
--
2.14.3