On Mon, Nov 17, 2025 at 05:12:43PM +0100, Johan Hovold wrote:
Make sure to drop the reference taken when looking up the DMA platform device during of_dma_xlate() when releasing channel resources.
Note that commit 3832b78b3ec2 ("dmaengine: at_hdmac: add missing put_device() call in at_dma_xlate()") fixed the leak in a couple of error paths but the reference is still leaking on successful allocation.
...
- kfree(chan->private);
- chan->private = NULL;
- atslave = chan->private;
- if (atslave) {
put_device(atslave->dma_dev);kfree(atslave);chan->private = NULL;- }
It can also be
atslave = chan->private; if (atslave) put_device(atslave->dma_dev); kfree(chan->private); chan->private = NULL;
which makes patch shorter.
In any case I'm wondering if the asynchronous nature of put_device() can collide with chan->private = NULL assignment. I think as long as it's not used inside ->release() of the device, we are fine.