patch "staging: comedi: das1800: fix possible NULL dereference" added to staging-testing
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: das1800: fix possible NULL dereference
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-testing 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 be merged to the staging-next branch sometime soon, after it passes testing, and the merge window is open.
If you have any questions about this process, please let me know.
Quoted 1 line
From
d375278d666760e195693b57415ba0a125cadd55Mon Sep 17 00:00:00 2001
From: H Hartley Sweeten <[email protected]>
Date: Fri, 8 Apr 2016 10:14:58 -0700
Subject: staging: comedi: das1800: fix possible NULL dereference
DMA is optional with this driver. If it was not enabled the devpriv->dma pointer will be NULL.
Fix the possible NULL pointer dereference when trying to disable the DMA channels in das1800_ai_cancel() and tidy up the comments to fix the checkpatch.pl issues:
WARNING: line over 80 characters
It's probably harmless in das1800_ai_setup_dma() because the 'desc' pointer will not be used if DMA is disabled but fix it there also.
--- drivers/staging/comedi/drivers/das1800.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
drivers/staging/comedi/drivers/das1800.c +13 -9
@@ -567,14 +567,17 @@ static int das1800_cancel(struct comedi_device *dev, struct comedi_subdevice *s)struct comedi_isadma_desc *desc;int i; -outb (0x0 , dev->iobase +DAS1800_STATUS );/* disable conversions */ -outb (0x0 , dev->iobase +DAS1800_CONTROL_B );/* disable interrupts and dma */ -outb (0x0 , dev->iobase +DAS1800_CONTROL_A );/* disable and clear fifo and stop triggering */ - -for (i =0 ; i <2 ; i++) { - desc = &dma->desc[i]; -if (desc->chan) -comedi_isadma_disable (desc->chan); +/* disable and stop conversions */ +outb (0x0 , dev->iobase +DAS1800_STATUS ); +outb (0x0 , dev->iobase +DAS1800_CONTROL_B ); +outb (0x0 , dev->iobase +DAS1800_CONTROL_A ); + +if (dma) { +for (i =0 ; i <2 ; i++) { + desc = &dma->desc[i]; +if (desc->chan) +comedi_isadma_disable (desc->chan); + } }return 0 ;
@@ -934,13 +937,14 @@ static void das1800_ai_setup_dma(struct comedi_device *dev, {struct das1800_private *devpriv = dev->private;struct comedi_isadma *dma = devpriv->dma; -struct comedi_isadma_desc *desc = &dma->desc[0 ]; +struct comedi_isadma_desc *desc;unsigned int bytes;if ((devpriv->irq_dma_bits &DMA_ENABLED ) ==0 )return ; dma->cur_dma =0 ; + desc = &dma->desc[0 ];/* determine a dma transfer size to fill buffer in 0.3 sec */ bytes =das1800_ai_transfer_size (dev, s, desc->maxsize,300000000 );
Signature · 1 line
2.8.0