Subject: + mm-page_alloc-make-first_page-visible-before-pagetail.patch added to -mm tree To: rientjes@xxxxxxxxxx,Holger.Kiehl@xxxxxx,aquini@xxxxxxxxxx,cl@xxxxxxxxx,mgorman@xxxxxxx,mhocko@xxxxxxx,stable@xxxxxxxxxxxxxxx,vbabka@xxxxxxx From: akpm@xxxxxxxxxxxxxxxxxxxx Date: Tue, 04 Feb 2014 16:33:05 -0800 The patch titled Subject: mm, page_alloc: make first_page visible before PageTail has been added to the -mm tree. Its filename is mm-page_alloc-make-first_page-visible-before-pagetail.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-page_alloc-make-first_page-visible-before-pagetail.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-page_alloc-make-first_page-visible-before-pagetail.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: David Rientjes <rientjes@xxxxxxxxxx> Subject: mm, page_alloc: make first_page visible before PageTail Commit bf6bddf1924e ("mm: introduce compaction and migration for ballooned pages") introduces page_count(page) into memory compaction which dereferences page->first_page if PageTail(page). This caused Holger to observe a very rare NULL pointer dereference on the aforementioned page_count(page). Introduce a store memory barrier to ensure page->first_page is properly initialized so that code that does page_count(page) on pages off the lru always have a valid p->first_page. Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx> Reported-by: Holger Kiehl <Holger.Kiehl@xxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Rafael Aquini <aquini@xxxxxxxxxx> Cc: Vlastimil Babka <vbabka@xxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxx> Cc: Mel Gorman <mgorman@xxxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/page_alloc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff -puN mm/page_alloc.c~mm-page_alloc-make-first_page-visible-before-pagetail mm/page_alloc.c --- a/mm/page_alloc.c~mm-page_alloc-make-first_page-visible-before-pagetail +++ a/mm/page_alloc.c @@ -369,9 +369,11 @@ void prep_compound_page(struct page *pag __SetPageHead(page); for (i = 1; i < nr_pages; i++) { struct page *p = page + i; - __SetPageTail(p); set_page_count(p, 0); p->first_page = page; + /* Make sure p->first_page is always valid for PageTail() */ + smp_wmb(); + __SetPageTail(p); } } _ Patches currently in -mm which might be from rientjes@xxxxxxxxxx are documentation-kernel-parameterstxt-fix-memmap=-language.patch mm-__set_page_dirty_nobuffers-uses-spin_lock_irqseve-instead-of-spin_lock_irq.patch mm-slub-list_lock-may-not-be-held-in-some-circumstances.patch fs-filec-fdtable-avoid-triggering-ooms-from-alloc_fdmem.patch mm-page_alloc-make-first_page-visible-before-pagetail.patch numa-mem-hotplug-initialize-numa_kernel_nodes-in-numa_clear_kernel_node_hotplug.patch numa-mem-hotplug-fix-array-index-overflow-when-synchronizing-nid-to-memblockreserved.patch kthread-ensure-locality-of-task_struct-allocations.patch mm-compaction-ignore-pageblock-skip-when-manually-invoking-compaction.patch mm-vmscan-shrink_slab-rename-max_pass-freeable.patch mm-utilc-add-kstrimdup.patch cpusets-allocate-heap-only-when-required.patch linux-next.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html