diff mbox

[2/2] drivers/perf: arm_pmu: Fix NULL pointer dereference during probe

Message ID 1472314790-4268-2-git-send-email-stefan.wahren@i2se.com (mailing list archive)
State New, archived
Headers show

Commit Message

Stefan Wahren Aug. 27, 2016, 4:19 p.m. UTC
Patch 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking
interrupt-affinity property") unintended also fixes perf_event support
for bcm2835 which doesn't have PMU interrupts. Unfortunately this change
introduce a NULL pointer dereference on bcm2835, because irq_is_percpu
always expected to be called with a valid IRQ. So fix this regression
by validating the IRQ before.

Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Fixes: 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking \"interrupt-affinity\" property")
---
 drivers/perf/arm_pmu.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Note: checkpatch.pl complains about the fixes tag, but i don't know how to
escape it correctly.

Comments

Will Deacon Aug. 30, 2016, 11:27 a.m. UTC | #1
On Sat, Aug 27, 2016 at 04:19:50PM +0000, Stefan Wahren wrote:
> Patch 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking
> interrupt-affinity property") unintended also fixes perf_event support
> for bcm2835 which doesn't have PMU interrupts. Unfortunately this change
> introduce a NULL pointer dereference on bcm2835, because irq_is_percpu
> always expected to be called with a valid IRQ. So fix this regression
> by validating the IRQ before.
> 
> Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
> Fixes: 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking \"interrupt-affinity\" property")
> ---
>  drivers/perf/arm_pmu.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Thanks, these two look good to me. I'll queue them up as fixes and hopefully
they'll land in -rc5.

Will
Kevin Hilman Sept. 1, 2016, 2:17 a.m. UTC | #2
Will Deacon <will.deacon@arm.com> writes:

> On Sat, Aug 27, 2016 at 04:19:50PM +0000, Stefan Wahren wrote:
>> Patch 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking
>> interrupt-affinity property") unintended also fixes perf_event support
>> for bcm2835 which doesn't have PMU interrupts. Unfortunately this change
>> introduce a NULL pointer dereference on bcm2835, because irq_is_percpu
>> always expected to be called with a valid IRQ. So fix this regression
>> by validating the IRQ before.
>> 
>> Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
>> Fixes: 7f1d642fbb5c ("drivers/perf: arm-pmu: Fix handling of SPI lacking \"interrupt-affinity\" property")
>> ---
>>  drivers/perf/arm_pmu.c |    2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> Thanks, these two look good to me. I'll queue them up as fixes and hopefully
> they'll land in -rc5.

FWIW, I tested this on bcm2835-rpi and verified it fixes the boot
problem in mainline.

Tested-by: Kevin Hilman <khilman@baylibre.com>

Kevin
diff mbox

Patch

diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
index 1b48bf0..f5e1008 100644
--- a/drivers/perf/arm_pmu.c
+++ b/drivers/perf/arm_pmu.c
@@ -970,7 +970,7 @@  static int of_pmu_irq_cfg(struct arm_pmu *pmu)
 	if (cpumask_weight(&pmu->supported_cpus) == 0) {
 		int irq = platform_get_irq(pdev, 0);
 
-		if (irq_is_percpu(irq)) {
+		if (irq >= 0 && irq_is_percpu(irq)) {
 			/* If using PPIs, check the affinity of the partition */
 			int ret;