|
|
|
[PATCH 2.6.27.8 1/1] em28xx: Fix audio URB transfer buffer memory leak and race condition/corruption of capture pointer | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
====
em28xx: Fix audio URB transfer buffer memory leak and race
condition/corruption of capture pointer
From: Robert Krakora <rob.krakora@xxxxxxxxxxxxxxxxxxxxx>
Fix audio URB transfer buffer memory leak and race
condition/corruption of capture pointer
Priority: normal
Signed-off-by: Robert Krakora <rob.krakora@xxxxxxxxxxxxxxxxxxxxx>
diff -r 6896782d783d linux/drivers/media/video/em28xx/em28xx-audio.c
--- a/linux/drivers/media/video/em28xx/em28xx-audio.c Wed Jan 14
10:06:12 2009 -0200
+++ b/linux/drivers/media/video/em28xx/em28xx-audio.c Wed Jan 14
12:47:00 2009 -0500
@@ -62,11 +62,20 @@
int i;
dprintk("Stopping isoc\n");
- for (i = 0; i < EM28XX_AUDIO_BUFS; i++) {
- usb_unlink_urb(dev->adev.urb[i]);
- usb_free_urb(dev->adev.urb[i]);
- dev->adev.urb[i] = NULL;
- }
+ for (i = 0; i < EM28XX_AUDIO_BUFS; i++) {
+ usb_unlink_urb(dev->adev.urb[i]);
+ usb_free_urb(dev->adev.urb[i]);
+ dev->adev.urb[i] = NULL;
+ if (dev->adev.urb[i]) {
+ usb_unlink_urb(dev->adev.urb[i]);
+ usb_free_urb(dev->adev.urb[i]);
+ dev->adev.urb[i] = NULL;
+ }
+ if (dev->adev.transfer_buffer) {
+ kfree(dev->adev.transfer_buffer[i]);
+ dev->adev.transfer_buffer[i] = NULL;
+ }
+ }
return 0;
}
@@ -458,11 +467,15 @@
*substream)
#endif
{
+ unsigned long flags;
+
struct em28xx *dev;
-
snd_pcm_uframes_t hwptr_done;
+
dev = snd_pcm_substream_chip(substream);
+ spin_lock_irqsave(&dev->adev.slock, flags);
hwptr_done = dev->adev.hwptr_done_capture;
+ spin_unlock_irqrestore(&dev->adev.slock, flags);
return hwptr_done;
}
--
Rob Krakora
Software Engineer
MessageNet Systems
101 East Carmel Dr. Suite 105
Carmel, IN 46032
(317)566-1677 Ext. 206
(317)663-0808 Fax
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request@xxxxxxxxxx?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list
[Linux Media] [Older V4L] [Linux DVB] [Video Disk Recorder] [Linux Kernel] [Asterisk] [Photo] [DCCP] [Netdev] [Xorg] [Util Linux NG] [Xfree86] [Free Photo Albums] [Fedora Users] [Fedora Women] [ALSA Users] [ALSA Devel] [SSH] [DVB Maintainers] [Linux USB] [Yosemite Information]
![]() |
![]() |