From: Andi Kleen Date: Mon, 26 Jun 2006 11:59:17 +0000 (+0200) Subject: [PATCH] x86_64: Fix fast check in safe_smp_processor_id X-Git-Tag: v2.6.18-rc1~612^2~17 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=75bd665cc9f4d0f67164d9145e446ae554d4ed3f;p=linux-2.6-omap-h63xx.git [PATCH] x86_64: Fix fast check in safe_smp_processor_id The APIC ID returned by hard_smp_processor_id can be beyond NR_CPUS and then overflow the x86_cpu_to_apic[] array. Add a check for overflow. If it happens then the slow loop below will catch. Bug pointed out by Doug Thompson Signed-off-by: Andi Kleen Signed-off-by: Linus Torvalds --- diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index fe906ba1cf4..5885b8f044b 100644 --- a/arch/x86_64/kernel/smp.c +++ b/arch/x86_64/kernel/smp.c @@ -520,13 +520,13 @@ asmlinkage void smp_call_function_interrupt(void) int safe_smp_processor_id(void) { - int apicid, i; + unsigned apicid, i; if (disable_apic) return 0; apicid = hard_smp_processor_id(); - if (x86_cpu_to_apicid[apicid] == apicid) + if (apicid < NR_CPUS && x86_cpu_to_apicid[apicid] == apicid) return apicid; for (i = 0; i < NR_CPUS; ++i) {