Commit fd51c697 authored by Amit Choudhary's avatar Amit Choudhary Committed by Mauro Carvalho Chehab

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: default avatarAmit Choudhary <amit2030@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 20ec811e
...@@ -450,6 +450,13 @@ static int se401_start_stream(struct usb_se401 *se401) ...@@ -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) ...@@ -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) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment