All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
@ 2009-12-15  8:40 Paul Mackerras
  2009-12-15 10:31 ` Peter Zijlstra
  2009-12-15 12:12 ` [tip:perf/urgent] " tip-bot for Paul Mackerras
  0 siblings, 2 replies; 7+ messages in thread
From: Paul Mackerras @ 2009-12-15  8:40 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra; +Cc: linux-kernel, Michael Neuling

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>
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);
 
 		/*

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
  2009-12-15  8:40 [PATCH 1/2] perf_event: Fix incorrect range check on cpu number Paul Mackerras
@ 2009-12-15 10:31 ` Peter Zijlstra
  2009-12-15 11:00   ` Paul Mackerras
  2009-12-15 12:12 ` [tip:perf/urgent] " tip-bot for Paul Mackerras
  1 sibling, 1 reply; 7+ messages in thread
From: Peter Zijlstra @ 2009-12-15 10:31 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Ingo Molnar, linux-kernel, Michael Neuling

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);
>  
>  		/*


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
  2009-12-15 10:31 ` Peter Zijlstra
@ 2009-12-15 11:00   ` Paul Mackerras
  2009-12-15 18:54     ` Corey Ashford
  0 siblings, 1 reply; 7+ messages in thread
From: Paul Mackerras @ 2009-12-15 11:00 UTC (permalink / raw)
  To: Peter Zijlstra; +Cc: Ingo Molnar, linux-kernel, Michael Neuling

On Tue, Dec 15, 2009 at 11:31:32AM +0100, Peter Zijlstra wrote:

> 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?

Yeah, Mikey ran across this on a POWER7 box here.

Paul.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:perf/urgent] perf_event: Fix incorrect range check on cpu number
  2009-12-15  8:40 [PATCH 1/2] perf_event: Fix incorrect range check on cpu number Paul Mackerras
  2009-12-15 10:31 ` Peter Zijlstra
@ 2009-12-15 12:12 ` tip-bot for Paul Mackerras
  1 sibling, 0 replies; 7+ messages in thread
From: tip-bot for Paul Mackerras @ 2009-12-15 12:12 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, paulus, hpa, mingo, peterz, stable, tglx, mingo,
	mikey

Commit-ID:  0f624e7e5625f4c30c836b7a5decfe2553582391
Gitweb:     http://git.kernel.org/tip/0f624e7e5625f4c30c836b7a5decfe2553582391
Author:     Paul Mackerras <paulus@samba.org>
AuthorDate: Tue, 15 Dec 2009 19:40:32 +1100
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 15 Dec 2009 13:09:55 +0100

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>
---
 kernel/perf_event.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kernel/perf_event.c b/kernel/perf_event.c
index d891ec4..8823b08 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)
 		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);
 
 		/*

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
  2009-12-15 11:00   ` Paul Mackerras
@ 2009-12-15 18:54     ` Corey Ashford
  2009-12-15 19:08       ` Ingo Molnar
  0 siblings, 1 reply; 7+ messages in thread
From: Corey Ashford @ 2009-12-15 18:54 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Peter Zijlstra, Ingo Molnar, linux-kernel, Michael Neuling


Paul Mackerras wrote:
> On Tue, Dec 15, 2009 at 11:31:32AM +0100, Peter Zijlstra wrote:
> 
>> 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?
> 
> Yeah, Mikey ran across this on a POWER7 box here.

Does the perf tool need to be fixed too?  The "perf stat" tool, at least, has a 
"-a" switch that tells the tool to count the event on all cpus, and it does this 
by iterating over the number of cpus, 0..n, assuming they are all contiguous.

- Corey


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
  2009-12-15 18:54     ` Corey Ashford
@ 2009-12-15 19:08       ` Ingo Molnar
  2009-12-15 19:15         ` Corey Ashford
  0 siblings, 1 reply; 7+ messages in thread
From: Ingo Molnar @ 2009-12-15 19:08 UTC (permalink / raw)
  To: Corey Ashford
  Cc: Paul Mackerras, Peter Zijlstra, linux-kernel, Michael Neuling


* Corey Ashford <cjashfor@linux.vnet.ibm.com> wrote:

> 
> Paul Mackerras wrote:
> >On Tue, Dec 15, 2009 at 11:31:32AM +0100, Peter Zijlstra wrote:
> >
> >>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?
> >
> >Yeah, Mikey ran across this on a POWER7 box here.
> 
> Does the perf tool need to be fixed too?  The "perf stat" tool, at
> least, has a "-a" switch that tells the tool to count the event on
> all cpus, and it does this by iterating over the number of cpus,
> 0..n, assuming they are all contiguous.

Yes, see patch 2/2 of this series.

	Ingo

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number
  2009-12-15 19:08       ` Ingo Molnar
@ 2009-12-15 19:15         ` Corey Ashford
  0 siblings, 0 replies; 7+ messages in thread
From: Corey Ashford @ 2009-12-15 19:15 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Paul Mackerras, Peter Zijlstra, linux-kernel, Michael Neuling

Ingo Molnar wrote:
> * Corey Ashford <cjashfor@linux.vnet.ibm.com> wrote:
> 
>> Paul Mackerras wrote:
>>> On Tue, Dec 15, 2009 at 11:31:32AM +0100, Peter Zijlstra wrote:
>>>
>>>> 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?
>>> Yeah, Mikey ran across this on a POWER7 box here.
>> Does the perf tool need to be fixed too?  The "perf stat" tool, at
>> least, has a "-a" switch that tells the tool to count the event on
>> all cpus, and it does this by iterating over the number of cpus,
>> 0..n, assuming they are all contiguous.
> 
> Yes, see patch 2/2 of this series.
> 
> 	Ingo

Oops! missed that.  Thanks!

- Corey



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-12-15 19:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-15  8:40 [PATCH 1/2] perf_event: Fix incorrect range check on cpu number Paul Mackerras
2009-12-15 10:31 ` Peter Zijlstra
2009-12-15 11:00   ` Paul Mackerras
2009-12-15 18:54     ` Corey Ashford
2009-12-15 19:08       ` Ingo Molnar
2009-12-15 19:15         ` Corey Ashford
2009-12-15 12:12 ` [tip:perf/urgent] " tip-bot for Paul Mackerras

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.