drivers/media/video/stv680.c: check kmalloc() return value.
PATCH 1/1 drivers/media/video/stv680.c: check kmalloc() return value.
Description: Check the return value of kmalloc() in function stv680_start_stream(), in file drivers/media/video/stv680.c.
Signed-off-by Amit Choudhary <[email protected]>
drivers/media/video/stv680.c +30 -4
@@ -687,7 +687,11 @@ static int stv680_start_stream (struct u stv680->sbuf[i].data =kmalloc (stv680->rawbufsize,GFP_KERNEL );if (stv680->sbuf[i].data ==NULL ) {PDEBUG (0 ,"STV(e): Could not kmalloc raw data buffer %i" , i); -return -1 ; +for (i = i -1 ; i >=0 ; i--) { +kfree (stv680->sbuf[i].data); + stv680->sbuf[i].data =NULL ; + } +return -ENOMEM ; } }
@@ -698,15 +702,25 @@ static int stv680_start_stream (struct u stv680->scratch[i].data =kmalloc (stv680->rawbufsize,GFP_KERNEL );if (stv680->scratch[i].data ==NULL ) {PDEBUG (0 ,"STV(e): Could not kmalloc raw scratch buffer %i" , i); -return -1 ; +for (i = i -1 ; i >=0 ; i--) { +kfree (stv680->scratch[i].data); + stv680->scratch[i].data =NULL ; + } + goto nomem_sbuf; } stv680->scratch[i].state =BUFFER_UNUSED ; }for (i =0 ; i <STV680_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 (stv680->urb[i]); +usb_free_urb (stv680->urb[i]); + stv680->urb[i] =NULL ; + } + goto nomem_scratch; + }/* sbuf is urb->transfer_buffer, later gets memcpyed to scratch */ usb_fill_bulk_urb (urb, stv680->udev,
@@ -721,6 +735,18 @@ static int stv680_start_stream (struct u stv680->framecount =0 ;return 0 ; + + nomem_scratch: +for (i=0 ; i<STV680_NUMSCRATCH ; i++) { +kfree (stv680->scratch[i].data); + stv680->scratch[i].data =NULL ; + } + nomem_sbuf: +for (i=0 ; i<STV680_NUMSBUF ; i++) { +kfree (stv680->sbuf[i].data); + stv680->sbuf[i].data =NULL ; + } +return -ENOMEM ; }static int stv680_stop_stream (struct usb_stv *stv680)
Am Freitag, 9. März 2007 08:19 schrieb Amit Choudhary:
Quoted 1 line
Description: Check the return value of
kmalloc()in functionstv680_start_stream(), in filedrivers/media/video/stv680.c.
If you are making usb patches, please send them to the usb list and maintainers. Secondly, against which kernel is this? It won't apply to the newest kernel. If you are making patches for the stable series, say so.
Regards
Oliver