From: Christoph Lameter ZVC: Fix potential use of out of range page in kmem_getpages. We use page_zone(page) following several page increments in kmem_getpages(). Which page in a zone we use really does not matter. However, we may reach an invalid page and then oops. So move the counter decrement before we increment page. Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton --- mm/slab.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN mm/slab.c~zoned-vm-counters-conversion-of-nr_slab-to-per-zone-counter-fix-2 mm/slab.c --- 25/mm/slab.c~zoned-vm-counters-conversion-of-nr_slab-to-per-zone-counter-fix-2 Tue Jun 27 15:22:51 2006 +++ 25-akpm/mm/slab.c Tue Jun 27 15:22:51 2006 @@ -1522,12 +1522,12 @@ static void kmem_freepages(struct kmem_c struct page *page = virt_to_page(addr); const unsigned long nr_freed = i; + sub_zone_page_state(page_zone(page), NR_SLAB, nr_freed); while (i--) { BUG_ON(!PageSlab(page)); __ClearPageSlab(page); page++; } - sub_zone_page_state(page_zone(page), NR_SLAB, nr_freed); if (current->reclaim_state) current->reclaim_state->reclaimed_slab += nr_freed; free_pages((unsigned long)addr, cachep->gfporder); _