| From: Dou Liyang <douly.fnst@cn.fujitsu.com> |
| Date: Thu, 12 Apr 2018 09:40:52 +0800 |
| Subject: x86/acpi: Prevent X2APIC id 0xffffffff from being accounted |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit 10daf10ab154e31237a8c07242be3063fb6a9bf4 upstream. |
| |
| RongQing reported that there are some X2APIC id 0xffffffff in his machine's |
| ACPI MADT table, which makes the number of possible CPU inaccurate. |
| |
| The reason is that the ACPI X2APIC parser has no sanity check for APIC ID |
| 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@baidu.com> |
| Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Cc: len.brown@intel.com |
| Cc: rjw@rjwysocki.net |
| Cc: hpa@zytor.com |
| Link: https://lkml.kernel.org/r/20180412014052.25186-1-douly.fnst@cn.fujitsu.com |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/arch/x86/kernel/acpi/boot.c |
| +++ b/arch/x86/kernel/acpi/boot.c |
| @@ -227,6 +227,11 @@ acpi_parse_x2apic(struct acpi_subtable_h |
| |
| apic_id = processor->local_apic_id; |
| enabled = processor->lapic_flags & ACPI_MADT_ENABLED; |
| + |
| + /* Ignore invalid ID */ |
| + if (apic_id == 0xffffffff) |
| + return 0; |
| + |
| #ifdef CONFIG_X86_X2APIC |
| /* |
| * We need to register disabled CPU as well to permit |