patch "staging: comedi: gsc_hpdi: check dma_alloc_coherent() return value" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: gsc_hpdi: check dma_alloc_coherent() return value
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From ab42b48f32d4c766420c3499ee9c0289b7028182 Mon Sep 17 00:00:00 2001
From: Ian Abbott <[email protected]>
Date: Mon, 16 Dec 2019 11:08:23 +0000
Subject: staging: comedi: gsc_hpdi: check dma_alloc_coherent() return value
The "auto-attach" handler function gsc_hpdi_auto_attach() calls dma_alloc_coherent() in a loop to allocate some DMA data buffers, and also calls it to allocate a buffer for a DMA descriptor chain. However, it does not check the return value of any of these calls. Change gsc_hpdi_auto_attach() to return -ENOMEM if any of these dma_alloc_coherent() calls fail. This will result in the comedi core calling the "detach" handler gsc_hpdi_detach() as part of the clean-up, which will call gsc_hpdi_free_dma() to free any allocated DMA coherent memory buffers.
--- drivers/staging/comedi/drivers/gsc_hpdi.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/staging/comedi/drivers/gsc_hpdi.c +10 -0
@@ -623,6 +623,11 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev,dma_alloc_coherent (&pcidev->dev,DMA_BUFFER_SIZE , &devpriv->dio_buffer_phys_addr[i],GFP_KERNEL ); +if (!devpriv->dio_buffer[i]) { +dev_warn (dev->class_dev, +"failed to allocate DMA buffer\n" ); +return -ENOMEM ; + } }/* allocate dma descriptors */ devpriv->dma_desc = dma_alloc_coherent(&pcidev->dev,
@@ -630,6 +635,11 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev,NUM_DMA_DESCRIPTORS , &devpriv->dma_desc_phys_addr, GFP_KERNEL); +if (!devpriv->dma_desc) { +dev_warn (dev->class_dev, +"failed to allocate DMA descriptors\n" ); +return -ENOMEM ; + }if (devpriv->dma_desc_phys_addr &0xf ) {dev_warn (dev->class_dev," dma descriptors not quad-word aligned (bug)\n" );
Signature · 1 line
2.24.1