drivers/media/video/se401.c: check kmalloc() return value.
PATCH 1/1 drivers/media/video/se401.c: check kmalloc() return value.
Description: Check the return value of kmalloc() in function se401_start_stream(), in file drivers/media/video/se401.c.
drivers/media/video/se401.c +34 -2
@@ -450,6 +450,13 @@ static int se401_start_stream(struct usb }for (i=0 ; i<SE401_NUMSBUF ; i++) { se401->sbuf[i].data=kmalloc (SE401_PACKETSIZE ,GFP_KERNEL ); +if (!se401->sbuf[i].data) { +for (i = i -1 ; i >=0 ; i--) { +kfree (se401->sbuf[i].data); + se401->sbuf[i].data =NULL ; + } +return -ENOMEM ; + } } se401->bayeroffset=0 ;
@@ -458,13 +465,26 @@ static int se401_start_stream(struct usb se401->scratch_overflow=0 ;for (i=0 ; i<SE401_NUMSCRATCH ; i++) { se401->scratch[i].data=kmalloc (SE401_PACKETSIZE ,GFP_KERNEL ); +if (!se401->scratch[i].data) { +for (i = i -1 ; i >=0 ; i--) { +kfree (se401->scratch[i].data); + se401->scratch[i].data =NULL ; + } + goto nomem_sbuf; + } se401->scratch[i].state=BUFFER_UNUSED ; }for (i=0 ; i<SE401_NUMSBUF ; i++) { urb=usb_alloc_urb (0 ,GFP_KERNEL ); -if (!urb) -return -ENOMEM ; +if (!urb) { +for (i = i -1 ; i >=0 ; i--) { +usb_kill_urb (se401->urb[i]); +usb_free_urb (se401->urb[i]); + se401->urb[i] =NULL ; + } + goto nomem_scratch; + } usb_fill_bulk_urb(urb, se401->dev, usb_rcvbulkpipe(se401->dev, SE401_VIDEO_ENDPOINT),
@@ -482,6 +502,18 @@ static int se401_start_stream(struct usb se401->framecount=0 ;return 0 ; + + nomem_scratch: +for (i=0 ; i<SE401_NUMSCRATCH ; i++) { +kfree (se401->scratch[i].data); + se401->scratch[i].data =NULL ; + } + nomem_sbuf: +for (i=0 ; i<SE401_NUMSBUF ; i++) { +kfree (se401->sbuf[i].data); + se401->sbuf[i].data =NULL ; + } +return -ENOMEM ; }static int se401_stop_stream (struct usb_se401 *se401)
Am Freitag, 9. März 2007 08:30 schrieb Amit Choudhary:
Quoted 1 line
Description: Check the return value of
kmalloc()in functionse401_start_stream(), in filedrivers/media/video/se401.c.
Firstly, USB patches to the USB list.
Secondly, you've fixed an oopsable bug, but you also need to check the return values higher up in the call chain.
Regards
Oliver
Hi Oliver,
Em Sex, 2007-03-09 às 09:31 +0100, Oliver Neukum escreveu:
Quoted 4 lines
Am Freitag, 9. März 2007 08:30 schrieb Amit Choudhary:
Quoted 1 line
Description: Check the return value of
kmalloc()in functionse401_start_stream(), in filedrivers/media/video/se401.c.Firstly, USB patches to the USB list.
No. In this case, the proper lists for the devices under /drivers/media is the V4L mailing list (at [email protected] and [email protected]), were you will reach the maintainers of those code (no matter if those devices are USB or not).
Cheers,
Mauro