public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] saa7146 memory leakage in pagetable-handling, v2
@ 2009-10-07  7:41 Michael Hunold
  2009-10-31  8:57 ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Hunold @ 2009-10-07  7:41 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, johann.friedrichs

[-- Attachment #1: Type: text/plain, Size: 443 bytes --]

Hello Mauro,

on Mon, 28 Sep 2009 Johann Friedrichs sent a patch to linux-media in
order to fix a memory leak in my saa7146 driver.

He contacted me and together we have come up with a new patch that fixes
the problem more explicitely.

Would you please be so kind and manually pick up this patch and provide
it upstream?

All kudos belong to Johann Friedrich for finding the bug and providing
the initial fix.

Best regards
Michael Hunold.



[-- Attachment #2: saa7146_fix_pagetables_memory_leak.diff --]
[-- Type: text/plain, Size: 2124 bytes --]

V4L: saa7146: fix memory leak when buffer properties change or buffer
              is released

From: Johann Friedrichs <johann.friedrichs@web.de>

In buffer_release() the previously allocated pagetables are not
freed,  which might result in a memory leak in certain application
use-cases, where the frame format is changed from planar format to
non-planar format. The fix explicitely frees the page tables when a
format change is done and when buffer_release() is called.

Signed-off-by: Johann Friedrichs <johann.friedrichs@web.de>
Signed-off-by: Michael Hunold <hunold@linuxtv.org>

diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c
index 552dab4..becbaad 100644
--- a/drivers/media/common/saa7146_video.c
+++ b/drivers/media/common/saa7146_video.c
@@ -1205,6 +1205,13 @@ static int buffer_activate (struct saa7146_dev *dev,
 	return 0;
 }
 
+static void release_all_pagetables(struct saa7146_dev *dev, struct saa7146_buf *buf)
+{
+	saa7146_pgtable_free(dev->pci, &buf->pt[0]);
+	saa7146_pgtable_free(dev->pci, &buf->pt[1]);
+	saa7146_pgtable_free(dev->pci, &buf->pt[2]);
+}
+
 static int buffer_prepare(struct videobuf_queue *q,
 			  struct videobuf_buffer *vb, enum v4l2_field field)
 {
@@ -1257,16 +1264,12 @@ static int buffer_prepare(struct videobuf_queue *q,
 
 		sfmt = format_by_fourcc(dev,buf->fmt->pixelformat);
 
+		release_all_pagetables(dev, buf);
 		if( 0 != IS_PLANAR(sfmt->trans)) {
-			saa7146_pgtable_free(dev->pci, &buf->pt[0]);
-			saa7146_pgtable_free(dev->pci, &buf->pt[1]);
-			saa7146_pgtable_free(dev->pci, &buf->pt[2]);
-
 			saa7146_pgtable_alloc(dev->pci, &buf->pt[0]);
 			saa7146_pgtable_alloc(dev->pci, &buf->pt[1]);
 			saa7146_pgtable_alloc(dev->pci, &buf->pt[2]);
 		} else {
-			saa7146_pgtable_free(dev->pci, &buf->pt[0]);
 			saa7146_pgtable_alloc(dev->pci, &buf->pt[0]);
 		}
 
@@ -1329,6 +1332,9 @@ static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb)
 	struct saa7146_buf *buf = (struct saa7146_buf *)vb;
 
 	DEB_CAP(("vbuf:%p\n",vb));
+
+	release_all_pagetables(dev, buf);
+
 	saa7146_dma_free(dev,q,buf);
 }
 

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-10-31  8:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-07  7:41 [PATCH] saa7146 memory leakage in pagetable-handling, v2 Michael Hunold
2009-10-31  8:57 ` Mauro Carvalho Chehab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox