]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
mm: fix null pointer dereference in wait_iff_congested()
authorZlatko Calusic <zlatko.calusic@iskon.hr>
Fri, 28 Dec 2012 02:16:38 +0000 (03:16 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 28 Dec 2012 16:42:39 +0000 (08:42 -0800)
An unintended consequence of commit 4ae0a48b5efc ("mm: modify
pgdat_balanced() so that it also handles order-0") is that
wait_iff_congested() can now be called with NULL 'struct zone *'
producing kernel oops like this:

  BUG: unable to handle kernel NULL pointer dereference
  IP: [<ffffffff811542d9>] wait_iff_congested+0x59/0x140

This trivial patch fixes it.

Reported-by: Zhouping Liu <zliu@redhat.com>
Reported-and-tested-by: Sedat Dilek <sedat.dilek@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Zlatko Calusic <zlatko.calusic@iskon.hr>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/vmscan.c

index 23291b9ae87139c27f60de1e820e3d9e8e66f4b3..16b42af393ac09b6450ab6dcbfd169114f19f792 100644 (file)
@@ -2775,7 +2775,7 @@ loop_again:
                if (total_scanned && (sc.priority < DEF_PRIORITY - 2)) {
                        if (has_under_min_watermark_zone)
                                count_vm_event(KSWAPD_SKIP_CONGESTION_WAIT);
-                       else
+                       else if (unbalanced_zone)
                                wait_iff_congested(unbalanced_zone, BLK_RW_ASYNC, HZ/10);
                }