]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mm: page_isolation: check pfn validity before access
authorWeijie Yang <weijie.yang@samsung.com>
Tue, 7 Apr 2015 23:44:39 +0000 (09:44 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 7 Apr 2015 23:44:39 +0000 (09:44 +1000)
In the undo path of start_isolate_page_range(), we need to check the pfn
validity before accessing its page, or it will trigger an addressing
exception if there is hole in the zone.

This issue is found by code-review not a test-trigger.  In
"CONFIG_HOLES_IN_ZONE" environment, there is a certain chance that it
would casue an addressing exception when start_isolate_page_range()
fails, this could affect CMA, hugepage and memory-hotplug function.

Signed-off-by: Weijie Yang <weijie.yang@samsung.com>
Acked-by: Michal Nazarewicz <mina86@mina86.com>
Reviewed-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/page_isolation.c

index 755a42c76eb4747623da51acdeb780b322b5ac06..0c4505be0ed61f13f77684dbe3b2df91cdac5581 100644 (file)
@@ -177,8 +177,11 @@ int start_isolate_page_range(unsigned long start_pfn, unsigned long end_pfn,
 undo:
        for (pfn = start_pfn;
             pfn < undo_pfn;
-            pfn += pageblock_nr_pages)
-               unset_migratetype_isolate(pfn_to_page(pfn), migratetype);
+            pfn += pageblock_nr_pages) {
+               page = __first_valid_page(pfn, pageblock_nr_pages);
+               if (page)
+                       unset_migratetype_isolate(page, migratetype);
+       }
 
        return -EBUSY;
 }