staging: comedi: only set dev->n_subdevices when kcalloc succeedes
PATCH 4/8 staging: comedi: only set dev->n_subdevices when kcalloc succeedes
Quoted 1 line
From
4a741286f60e27ac7dd59eeb36ef49c5937d7fa2Mon Sep 17 00:00:00 2001
From: H Hartley Sweeten <[email protected]>
Date: Tue, 12 Jun 2012 10:07:03 -0700
Subject: [PATCH 4/8] staging: comedi: only set dev->n_subdevices when kcalloc
succeedes
It's possible for the kcalloc in comedi_alloc_subdevices to fail. Only set the dev->n_subdevices variable if the allocation is successful.
Since the core sets dev->n_subdevices, remove all the places in the drivers where this variable was getting set.
Signed-off-by H Hartley Sweeten <[email protected]>
Cc Ian Abbott <[email protected]>
Cc Frank Mori Hess <[email protected]>
Cc Greg Kroah-Hartman <[email protected]>
--- drivers/staging/comedi/drivers.c | 2 +- drivers/staging/comedi/drivers/comedi_test.c | 3 +-- drivers/staging/comedi/drivers/ni_660x.c | 4 +--- drivers/staging/comedi/drivers/s526.c | 3 +-- drivers/staging/comedi/drivers/usbdux.c | 7 ++++--- drivers/staging/comedi/drivers/usbduxfast.c | 10 +--------- drivers/staging/comedi/drivers/usbduxsigma.c | 7 ++++--- 7 files changed, 13 insertions(+), 23 deletions(-)
drivers/staging/comedi/drivers.c +1 -1
@@ -62,12 +62,12 @@ int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices)if (num_subdevices <1 )return -EINVAL ; - dev->n_subdevices = num_subdevices; dev->subdevices =kcalloc (num_subdevices,sizeof (struct comedi_subdevice ),GFP_KERNEL );if (!dev->subdevices)return -ENOMEM ; + dev->n_subdevices = num_subdevices;for (i =0 ; i < num_subdevices; ++i) { dev->subdevices[i].device = dev; dev->subdevices[i].async_dma_dir =DMA_NONE ;
drivers/staging/comedi/drivers/comedi_test.c +1 -2
@@ -447,8 +447,7 @@ static int waveform_attach(struct comedi_device *dev, devpriv->uvolt_amplitude = amplitude; devpriv->usec_period = period; - dev->n_subdevices =2 ; -if (comedi_alloc_subdevices (dev, dev->n_subdevices) <0 ) +if (comedi_alloc_subdevices (dev,2 ) <0 )return -ENOMEM ; s = dev->subdevices +0 ;
drivers/staging/comedi/drivers/ni_660x.c +1 -3
@@ -1093,9 +1093,7 @@ static int ni_660x_attach(struct comedi_device *dev,printk (KERN_INFO " %s " , dev->board_name); - dev->n_subdevices =2 +NI_660X_MAX_NUM_COUNTERS ; - -if (comedi_alloc_subdevices (dev, dev->n_subdevices) <0 ) +if (comedi_alloc_subdevices (dev,2 +NI_660X_MAX_NUM_COUNTERS ) <0 )return -ENOMEM ; s = dev->subdevices +0 ;
drivers/staging/comedi/drivers/s526.c +1 -2
@@ -778,8 +778,7 @@ static int s526_attach(struct comedi_device *dev, struct comedi_devconfig *it)* Allocate the subdevice structures. alloc_subdevice() is a * convenient macro defined in comedidev.h. */ - dev->n_subdevices =4 ; -if (comedi_alloc_subdevices (dev, dev->n_subdevices) <0 ) +if (comedi_alloc_subdevices (dev,4 ) <0 )return -ENOMEM ; s = dev->subdevices +0 ;
drivers/staging/comedi/drivers/usbdux.c +4 -3
@@ -2624,6 +2624,7 @@ static int usbdux_attach_common(struct comedi_device *dev, {int ret;struct comedi_subdevice *s =NULL ; +int n_subdevs;down (&udev->sem);/* pointer back to the corresponding comedi device */
@@ -2638,14 +2639,14 @@ static int usbdux_attach_common(struct comedi_device *dev,/* set number of subdevices */ if (udev->high_speed) {/* with pwm */ - dev->n_subdevices =5 ; + n_subdevs =5 ; }else {/* without pwm */ - dev->n_subdevices =4 ; + n_subdevs =4 ; }/* allocate space for the subdevices */ - ret =comedi_alloc_subdevices (dev, dev->n_subdevices); + ret =comedi_alloc_subdevices (dev, n_subdevs);if (ret <0 ) {dev_err (&udev->interface->dev,"comedi%d: error alloc space for subdev\n" , dev->minor);
drivers/staging/comedi/drivers/usbduxfast.c +1 -9
@@ -127,11 +127,6 @@#define NUMUSBDUXFAST 16/* -* number of subdevices -*/ -#define N_SUBDEVICES 1 - -/* * analogue in subdevice */ #define SUBDEV_AD 0
@@ -1671,11 +1666,8 @@ static int usbduxfast_attach(struct comedi_device *dev, dev->board_name =BOARDNAME ; -/* set number of subdevices */ - dev->n_subdevices =N_SUBDEVICES ; -/* allocate space for the subdevices */ - ret =comedi_alloc_subdevices (dev,N_SUBDEVICES ); + ret =comedi_alloc_subdevices (dev,1 );if (ret <0 ) {printk (KERN_ERR "comedi%d: usbduxfast: error alloc space for " "subdev\n" , dev->minor);
drivers/staging/comedi/drivers/usbduxsigma.c +4 -3
@@ -2642,6 +2642,7 @@ static int usbduxsigma_attach(struct comedi_device *dev,int index;int i;struct usbduxsub *udev; +int n_subdevs;int offset;
@@ -2683,14 +2684,14 @@ static int usbduxsigma_attach(struct comedi_device *dev,/* set number of subdevices */ if (udev->high_speed) {/* with pwm */ - dev->n_subdevices =4 ; + n_subdevs =4 ; }else {/* without pwm */ - dev->n_subdevices =3 ; + n_subdevs =3 ; }/* allocate space for the subdevices */ - ret =comedi_alloc_subdevices (dev, dev->n_subdevices); + ret =comedi_alloc_subdevices (dev, n_subdevs);if (ret <0 ) {dev_err (&udev->interface->dev,"comedi%d: no space for subdev\n" , dev->minor);
Signature · 1 line
1.7.7