[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>
This commit is contained in:
Родитель
e42f943737
Коммит
75bd665cc9
|
@ -520,13 +520,13 @@ asmlinkage void smp_call_function_interrupt(void)
|
||||||
|
|
||||||
int safe_smp_processor_id(void)
|
int safe_smp_processor_id(void)
|
||||||
{
|
{
|
||||||
int apicid, i;
|
unsigned apicid, i;
|
||||||
|
|
||||||
if (disable_apic)
|
if (disable_apic)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
apicid = hard_smp_processor_id();
|
apicid = hard_smp_processor_id();
|
||||||
if (x86_cpu_to_apicid[apicid] == apicid)
|
if (apicid < NR_CPUS && x86_cpu_to_apicid[apicid] == apicid)
|
||||||
return apicid;
|
return apicid;
|
||||||
|
|
||||||
for (i = 0; i < NR_CPUS; ++i) {
|
for (i = 0; i < NR_CPUS; ++i) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче