[3.13.y.z extended stable] Patch "DMA, CMA: fix possible memory leak" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Tue Jul 15 21:29:57 UTC 2014


This is a note to let you know that I have just added a patch titled

    DMA, CMA: fix possible memory leak

to the linux-3.13.y-queue branch of the 3.13.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.13.y-queue

This patch is scheduled to be released in version 3.13.11.5.

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.13.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Kamal

------

>From d98874bb274e9c13a8a0a92dbefd8b6fc647da1d Mon Sep 17 00:00:00 2001
From: Joonsoo Kim <iamjoonsoo.kim at lge.com>
Date: Mon, 23 Jun 2014 13:22:07 -0700
Subject: DMA, CMA: fix possible memory leak

commit fe8eea4f4a3f299ef83ed090d5354698ebe4fda8 upstream.

We should free memory for bitmap when we find zone mismatch, otherwise
this memory will leak.

Additionally, I copy code comment from PPC KVM's CMA code to inform why
we need to check zone mis-match.

Signed-off-by: Joonsoo Kim <iamjoonsoo.kim at lge.com>
Acked-by: Zhang Yanfei <zhangyanfei at cn.fujitsu.com>
Reviewed-by: Michal Nazarewicz <mina86 at mina86.com>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
Acked-by: Minchan Kim <minchan at kernel.org>
Cc: "Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com>
Cc: Marek Szyprowski <m.szyprowski at samsung.com>
Cc: Michal Nazarewicz <mina86 at mina86.com>
Cc: Paolo Bonzini <pbonzini at redhat.com>
Cc: Gleb Natapov <gleb at kernel.org>
Cc: Alexander Graf <agraf at suse.de>
Cc: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Cc: Paul Mackerras <paulus at samba.org>
Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
---
 drivers/base/dma-contiguous.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c
index 165c2c2..d3bffa4 100644
--- a/drivers/base/dma-contiguous.c
+++ b/drivers/base/dma-contiguous.c
@@ -155,13 +155,23 @@ static int __init cma_activate_area(struct cma *cma)
 		base_pfn = pfn;
 		for (j = pageblock_nr_pages; j; --j, pfn++) {
 			WARN_ON_ONCE(!pfn_valid(pfn));
+			/*
+			 * alloc_contig_range requires the pfn range
+			 * specified to be in the same zone. Make this
+			 * simple by forcing the entire CMA resv range
+			 * to be in the same zone.
+			 */
 			if (page_zone(pfn_to_page(pfn)) != zone)
-				return -EINVAL;
+				goto err;
 		}
 		init_cma_reserved_pageblock(pfn_to_page(base_pfn));
 	} while (--i);

 	return 0;
+
+err:
+	kfree(cma->bitmap);
+	return -EINVAL;
 }

 static struct cma cma_areas[MAX_CMA_AREAS];
--
1.9.1





More information about the kernel-team mailing list