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:
parent
20ec811edd
commit
fd51c697dd
1 changed files with 34 additions and 2 deletions
|
@ -450,6 +450,13 @@ static int se401_start_stream(struct usb_se401 *se401)
|
|||
}
|
||||
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 *se401)
|
|||
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 *se401)
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue