V4L/DVB (5490): Drivers/media/video/se401.c: check kmalloc() return value.

Check the return value of kmalloc() in function se401_start_stream(), in
file drivers/media/video/se401.c.

Signed-off-by: Amit Choudhary <amit2030@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
Amit Choudhary 2007-03-30 17:48:59 -03:00 committed by Mauro Carvalho Chehab
parent 20ec811edd
commit fd51c697dd
1 changed files with 34 additions and 2 deletions

View File

@ -450,6 +450,13 @@ static int se401_start_stream(struct usb_se401 *se401)
} }
for (i=0; i<SE401_NUMSBUF; i++) { for (i=0; i<SE401_NUMSBUF; i++) {
se401->sbuf[i].data=kmalloc(SE401_PACKETSIZE, GFP_KERNEL); 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; se401->bayeroffset=0;
@ -458,13 +465,26 @@ static int se401_start_stream(struct usb_se401 *se401)
se401->scratch_overflow=0; se401->scratch_overflow=0;
for (i=0; i<SE401_NUMSCRATCH; i++) { for (i=0; i<SE401_NUMSCRATCH; i++) {
se401->scratch[i].data=kmalloc(SE401_PACKETSIZE, GFP_KERNEL); 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; se401->scratch[i].state=BUFFER_UNUSED;
} }
for (i=0; i<SE401_NUMSBUF; i++) { for (i=0; i<SE401_NUMSBUF; i++) {
urb=usb_alloc_urb(0, GFP_KERNEL); urb=usb_alloc_urb(0, GFP_KERNEL);
if(!urb) if(!urb) {
return -ENOMEM; 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_fill_bulk_urb(urb, se401->dev,
usb_rcvbulkpipe(se401->dev, SE401_VIDEO_ENDPOINT), usb_rcvbulkpipe(se401->dev, SE401_VIDEO_ENDPOINT),
@ -482,6 +502,18 @@ static int se401_start_stream(struct usb_se401 *se401)
se401->framecount=0; se401->framecount=0;
return 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) static int se401_stop_stream(struct usb_se401 *se401)