linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] dmaengine: at_hdmac: fix memory leak in at_dma_xlate()
@ 2018-11-27 16:06 Richard Genoud
  2018-11-27 16:06 ` [PATCH] dmaengine: at_hdmac: fix module unloading Richard Genoud
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Richard Genoud @ 2018-11-27 16:06 UTC (permalink / raw)
  To: Ludovic Desroches, Dan Williams, Vinod Koul
  Cc: Alexandre Belloni, Nicolas Ferre, Maxime Ripard, Mario Forner,
	linux-arm-kernel, dmaengine, linux-kernel, linux-serial,
	Richard Genoud, stable

The leak was found when opening/closing a serial port a great number of
time, increasing kmalloc-32 in slabinfo.

Each time the port was opened, dma_request_slave_channel() was called.
Then, in at_dma_xlate(), atslave was allocated with devm_kzalloc() and
never freed. (Well, it was free at module unload, but that's not what we
want).
So, here, kzalloc is more suited for the job since it has to be freed in
atc_free_chan_resources().

Cc: stable@vger.kernel.org
Fixes: bbe89c8e3d59 ("at_hdmac: move to generic DMA binding")
Reported-by: Mario Forner <m.forner@be4energy.com>
Suggested-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
---
 drivers/dma/at_hdmac.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
index 7cbac6e8c113..1b7f0ca0d5cd 100644
--- a/drivers/dma/at_hdmac.c
+++ b/drivers/dma/at_hdmac.c
@@ -1641,6 +1641,12 @@ static void atc_free_chan_resources(struct dma_chan *chan)
 	atchan->descs_allocated = 0;
 	atchan->status = 0;
 
+	/*
+	 * Free atslave allocated in at_dma_xlate()
+	 */
+	kfree(chan->private);
+	chan->private = NULL;
+
 	dev_vdbg(chan2dev(chan), "free_chan_resources: done\n");
 }
 
@@ -1675,7 +1681,7 @@ static struct dma_chan *at_dma_xlate(struct of_phandle_args *dma_spec,
 	dma_cap_zero(mask);
 	dma_cap_set(DMA_SLAVE, mask);
 
-	atslave = devm_kzalloc(&dmac_pdev->dev, sizeof(*atslave), GFP_KERNEL);
+	atslave = kzalloc(sizeof(*atslave), GFP_KERNEL);
 	if (!atslave)
 		return NULL;
 

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

end of thread, other threads:[~2018-11-30 10:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-27 16:06 [PATCH] dmaengine: at_hdmac: fix memory leak in at_dma_xlate() Richard Genoud
2018-11-27 16:06 ` [PATCH] dmaengine: at_hdmac: fix module unloading Richard Genoud
2018-11-29 13:52   ` Ludovic Desroches
2018-11-29 14:21   ` Vinod Koul
2018-11-29 13:51 ` [PATCH] dmaengine: at_hdmac: fix memory leak in at_dma_xlate() Ludovic Desroches
2018-11-29 14:20 ` Vinod Koul
2018-11-30 10:07 ` Mario Forner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).