diff options
author | Andi Kleen <ak@suse.de> | 2006-06-26 13:59:17 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-26 19:48:21 +0200 |
commit | 75bd665cc9f4d0f67164d9145e446ae554d4ed3f (patch) | |
tree | ddfd134ef54138eea8e341039466c7e470203c71 /arch/x86_64/kernel/smp.c | |
parent | [PATCH] x86_64: x86_64 setup.c - printing cmp related boottime information (diff) | |
download | linux-75bd665cc9f4d0f67164d9145e446ae554d4ed3f.tar.xz linux-75bd665cc9f4d0f67164d9145e446ae554d4ed3f.zip |
[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 <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/x86_64/kernel/smp.c')
-rw-r--r-- | arch/x86_64/kernel/smp.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86_64/kernel/smp.c b/arch/x86_64/kernel/smp.c index fe906ba1cf45..5885b8f044b2 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) { |