ARM: 8357/1: perf: fix memory leak when probing PMU PPIs

Commit 338d9dd3e2ae ("ARM: 8351/1: perf: don't warn about missing
interrupt-affinity property for PPIs") added a check for PPIs so that
we avoid parsing the interrupt-affinity property for these naturally
affine interrupts.

Unfortunately, this check can trigger an early (successful) return and
we will leak the irqs array. This patch fixes the issue by reordering
the code so that the check is performed before any independent
allocation.

Reported-by: David Binderman <dcb314@hotmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by Will Deacon and committed by Russell King 8d281284 1b979372

Changed files
+5 -4
arch
arm
+5 -4
arch/arm/kernel/perf_event_cpu.c
··· 304 304 static int of_pmu_irq_cfg(struct platform_device *pdev) 305 305 { 306 306 int i, irq; 307 - int *irqs = kcalloc(pdev->num_resources, sizeof(*irqs), GFP_KERNEL); 308 - 309 - if (!irqs) 310 - return -ENOMEM; 307 + int *irqs; 311 308 312 309 /* Don't bother with PPIs; they're already affine */ 313 310 irq = platform_get_irq(pdev, 0); 314 311 if (irq >= 0 && irq_is_percpu(irq)) 315 312 return 0; 313 + 314 + irqs = kcalloc(pdev->num_resources, sizeof(*irqs), GFP_KERNEL); 315 + if (!irqs) 316 + return -ENOMEM; 316 317 317 318 for (i = 0; i < pdev->num_resources; ++i) { 318 319 struct device_node *dn;