Messages in this thread | | | Subject | Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number | From | Peter Zijlstra <> | Date | Tue, 15 Dec 2009 11:31:32 +0100 |
| |
On Tue, 2009-12-15 at 19:40 +1100, Paul Mackerras wrote: > 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.
Cute, do you actually have hardware that does this?
> Reported-by: Michael Neuling <mikey@neuling.org> > Tested-by: Michael Neuling <mikey@neuling.org> > Cc: stable@kernel.org > Signed-off-by: Paul Mackerras <paulus@samba.org> > --- > kernel/perf_event.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/perf_event.c b/kernel/perf_event.c > index 6b7ddba..78551b3 100644 > --- a/kernel/perf_event.c > +++ b/kernel/perf_event.c > @@ -1604,7 +1604,7 @@ static struct perf_event_context *find_get_context(pid_t pid, int cpu) > if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) > return ERR_PTR(-EACCES); > > - if (cpu < 0 || cpu > num_possible_cpus()) > + if (cpu < 0 || cpu >= nr_cpumask_bits) > return ERR_PTR(-EINVAL); > > /*
| |