diff options
author | Hans de Goede <hdegoede@redhat.com> | 2010-10-26 04:16:32 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-12-29 05:16:30 -0500 |
commit | 2661da47daefd4f22f9fdc7e9294a1cb9edf515b (patch) | |
tree | 0a2e8731304e7637abc6bf4716ec8568a7e958ab | |
parent | 314b3e0881c6acb4f40e07565ac1a7798c7698a3 (diff) |
[media] gspca: only set gspca->int_urb if submitting it succeeds
Currently alloc_and_submit_int_urb() is setting gspca->int_urb
as soon as the allocation has succeeded, but if the subsequent
submit fails, the urb gets destroyed. And then later will
get destroyed again in gspca_input_destroy_urb() because
gspca->int_urb is set, leading to a double free.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/video/gspca/gspca.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index dbd63c542317..a089fcaed8ad 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
@@ -224,12 +224,12 @@ static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev, | |||
224 | buffer, buffer_len, | 224 | buffer, buffer_len, |
225 | int_irq, (void *)gspca_dev, interval); | 225 | int_irq, (void *)gspca_dev, interval); |
226 | urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | 226 | urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
227 | gspca_dev->int_urb = urb; | ||
228 | ret = usb_submit_urb(urb, GFP_KERNEL); | 227 | ret = usb_submit_urb(urb, GFP_KERNEL); |
229 | if (ret < 0) { | 228 | if (ret < 0) { |
230 | PDEBUG(D_ERR, "submit int URB failed with error %i", ret); | 229 | PDEBUG(D_ERR, "submit int URB failed with error %i", ret); |
231 | goto error_submit; | 230 | goto error_submit; |
232 | } | 231 | } |
232 | gspca_dev->int_urb = urb; | ||
233 | return ret; | 233 | return ret; |
234 | 234 | ||
235 | error_submit: | 235 | error_submit: |