Message ID | dec1496d46ccd5311d0f6e9f9ca4238be11bf6a6.1643440531.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | Accepted |
Commit | 5836947613ef33d311b4eff6a32d019580a214f5 |
Headers | show |
Series | powerpc: platforms: 52xx: Fix a resource leak in an error handling path | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 7 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 24 jobs. |
On Sat, 29 Jan 2022 08:16:04 +0100 Christophe JAILLET christophe.jaillet@wanadoo.fr wrote: >The error handling path of mpc52xx_lpbfifo_probe() and a request_irq() is >not balanced by a corresponding free_irq(). > >Add the missing call, as already done in the remove function. > >Fixes: 3c9059d79f5e ("powerpc/5200: add LocalPlus bus FIFO device driver") >Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> >--- >Another strange thing is that the remove function has: > /* Release the bestcomm transmit task */ > free_irq(bcom_get_task_irq(lpbfifo.bcom_tx_task), &lpbfifo); >but I've not been able to find a corresponding request_irq(). This driver does not request the tx task irq itself, but a fifo client driver can request/free tx interrupts for submitted fifo write tasks, like mpc5200 fec and pata drivers do, so it is okay. >Is it dead code? Is there something missing in the probe? No. -- Anatolij
On Sat, Jan 29, 2022 at 08:16:04AM +0100, Christophe JAILLET wrote: > The error handling path of mpc52xx_lpbfifo_probe() and a request_irq() is > not balanced by a corresponding free_irq(). > > Add the missing call, as already done in the remove function. > > Fixes: 3c9059d79f5e ("powerpc/5200: add LocalPlus bus FIFO device driver") > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> > --- > Another strange thing is that the remove function has: > /* Release the bestcomm transmit task */ > free_irq(bcom_get_task_irq(lpbfifo.bcom_tx_task), &lpbfifo); > but I've not been able to find a corresponding request_irq(). > > Is it dead code? Is there something missing in the probe? > (...Is it working?...) I think you're right that the tx_task IRQ is never allocated. I'm pretty sure that if you free a zero IRQ then it's a no-op. It won't find the 0 in the radix tree so irq_to_desc() returns NULL and free_irq() returns early. regards, dan carpenter
On Sat, 29 Jan 2022 08:16:04 +0100, Christophe JAILLET wrote: > The error handling path of mpc52xx_lpbfifo_probe() and a request_irq() is > not balanced by a corresponding free_irq(). > > Add the missing call, as already done in the remove function. > > Applied to powerpc/next. [1/1] powerpc: platforms: 52xx: Fix a resource leak in an error handling path https://git.kernel.org/powerpc/c/5836947613ef33d311b4eff6a32d019580a214f5 cheers
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c index b91ebebd9ff2..e0049b7df212 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c @@ -530,6 +530,7 @@ static int mpc52xx_lpbfifo_probe(struct platform_device *op) err_bcom_rx_irq: bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task); err_bcom_rx: + free_irq(lpbfifo.irq, &lpbfifo); err_irq: iounmap(lpbfifo.regs); lpbfifo.regs = NULL;
The error handling path of mpc52xx_lpbfifo_probe() and a request_irq() is not balanced by a corresponding free_irq(). Add the missing call, as already done in the remove function. Fixes: 3c9059d79f5e ("powerpc/5200: add LocalPlus bus FIFO device driver") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- Another strange thing is that the remove function has: /* Release the bestcomm transmit task */ free_irq(bcom_get_task_irq(lpbfifo.bcom_tx_task), &lpbfifo); but I've not been able to find a corresponding request_irq(). Is it dead code? Is there something missing in the probe? (...Is it working?...) --- arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c | 1 + 1 file changed, 1 insertion(+)