V4L/DVB (12369): stv680: kfree called before usb_kill_urb
The irq handler will touch memory. Even in the error case some URBs may complete. Thus no memory must be kfreed before all URBs are killed. Signed-off-by: Oliver Neukum <oliver@neukum.org> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
f5d887ae60
commit
085575a325
@@ -734,10 +734,6 @@ static int stv680_start_stream (struct usb_stv *stv680)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nomem_err:
|
nomem_err:
|
||||||
for (i = 0; i < STV680_NUMSCRATCH; i++) {
|
|
||||||
kfree(stv680->scratch[i].data);
|
|
||||||
stv680->scratch[i].data = NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; i < STV680_NUMSBUF; i++) {
|
for (i = 0; i < STV680_NUMSBUF; i++) {
|
||||||
usb_kill_urb(stv680->urb[i]);
|
usb_kill_urb(stv680->urb[i]);
|
||||||
usb_free_urb(stv680->urb[i]);
|
usb_free_urb(stv680->urb[i]);
|
||||||
@@ -745,6 +741,11 @@ static int stv680_start_stream (struct usb_stv *stv680)
|
|||||||
kfree(stv680->sbuf[i].data);
|
kfree(stv680->sbuf[i].data);
|
||||||
stv680->sbuf[i].data = NULL;
|
stv680->sbuf[i].data = NULL;
|
||||||
}
|
}
|
||||||
|
/* used in irq, free only as all URBs are dead */
|
||||||
|
for (i = 0; i < STV680_NUMSCRATCH; i++) {
|
||||||
|
kfree(stv680->scratch[i].data);
|
||||||
|
stv680->scratch[i].data = NULL;
|
||||||
|
}
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user