Messages in this thread Patch in this message | | | From | Andi Kleen <> | Subject | Re: [BUG] safe_smp_process_id() uses apicid which exceeds NR_CPUs in array | Date | Tue, 13 Jun 2006 06:03:32 +0200 |
| |
> > I noticed the: if (x86_cpu_to_apicid[apicid] == apicid) > above.
You're right - the fast check should either check for >= NR_CPUS or just be removed and let it be done by the loop. I came up with this patch.
Thanks.
-Andi
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 <ak@suse.de>
Index: linux/arch/x86_64/kernel/smp.c =================================================================== --- linux.orig/arch/x86_64/kernel/smp.c +++ linux/arch/x86_64/kernel/smp.c @@ -520,13 +520,13 @@ asmlinkage void smp_call_function_interr 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) { - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |