aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/perf_event.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2009-12-15 03:40:32 -0500
committerIngo Molnar <mingo@elte.hu>2009-12-15 07:09:55 -0500
commit0f624e7e5625f4c30c836b7a5decfe2553582391 (patch)
tree6de6f9fbb15db70007238c923efb48dcde194c20 /kernel/perf_event.c
parenta6005123ce22770dbd91bc3cb637ce0807ab959b (diff)
perf_event: Fix incorrect range check on cpu number
It is quite legitimate for CPUs to be numbered sparsely, meaning that it possible for an online CPU to have a number which is greater than the total count of possible CPUs. Currently find_get_context() has a sanity check on the cpu number where it checks it against num_possible_cpus(). This test can fail for a legitimate cpu number if the cpu_possible_mask is sparsely populated. This fixes the problem by checking the CPU number against nr_cpumask_bits instead, since that is the appropriate check to ensure that the cpu number is same to pass to cpu_isset() subsequently. Reported-by: Michael Neuling <mikey@neuling.org> Signed-off-by: Paul Mackerras <paulus@samba.org> Tested-by: Michael Neuling <mikey@neuling.org> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: <stable@kernel.org> LKML-Reference: <20091215084032.GA18661@brick.ozlabs.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/perf_event.c')
-rw-r--r--kernel/perf_event.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index d891ec4a8100..8823b0885183 100644
--- a/kernel/perf_event.c
+++ b/kernel/perf_event.c
@@ -1603,7 +1603,7 @@ static struct perf_event_context *find_get_context(pid_t pid, int cpu)
1603 if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) 1603 if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN))
1604 return ERR_PTR(-EACCES); 1604 return ERR_PTR(-EACCES);
1605 1605
1606 if (cpu < 0 || cpu > num_possible_cpus()) 1606 if (cpu < 0 || cpu >= nr_cpumask_bits)
1607 return ERR_PTR(-EINVAL); 1607 return ERR_PTR(-EINVAL);
1608 1608
1609 /* 1609 /*