memcg: fix wrong pointer initialization at page migration when memcg is disabled.
authorKAMEZAWA Hiroyuki <[email protected]>
Wed, 11 Nov 2009 22:26:26 +0000 (14:26 -0800)
committerLinus Torvalds <[email protected]>
Thu, 12 Nov 2009 15:25:56 +0000 (07:25 -0800)
Lee Schermerhorn reported that he saw bad pointer dereference in
mem_cgroup_end_migration() when he disabled memcg by boot option.

memcg's page migration logic works as

mem_cgroup_prepare_migration(page, &ptr);
do page migration
mem_cgroup_end_migration(page, ptr);

Now, ptr is not initialized in prepare_migration when memcg is disabled
by boot option. This causes panic in end_migration. This patch fixes it.

Reported-by: Lee Schermerhorn <[email protected]>
Cc: Balbir Singh <[email protected]>
Signed-off-by: KAMEZAWA Hiroyuki <[email protected]>
Reviewed-by: Daisuke Nishimura <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/migrate.c

index 1a4bf4813780eb700ee026030bca18fedc2fbae6..7dbcb22316d2b2e482de278a8023c6429fe7bfaf 100644 (file)
@@ -602,7 +602,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
        struct page *newpage = get_new_page(page, private, &result);
        int rcu_locked = 0;
        int charge = 0;
-       struct mem_cgroup *mem;
+       struct mem_cgroup *mem = NULL;
 
        if (!newpage)
                return -ENOMEM;