• David Rientjes's avatar
    mm, mempolicy: task->mempolicy must be NULL before dropping final reference · c11600e4
    David Rientjes authored
    KASAN allocates memory from the page allocator as part of
    kmem_cache_free(), and that can reference current->mempolicy through any
    number of allocation functions.  It needs to be NULL'd out before the
    final reference is dropped to prevent a use-after-free bug:
    
    	BUG: KASAN: use-after-free in alloc_pages_current+0x363/0x370 at addr ffff88010b48102c
    	CPU: 0 PID: 15425 Comm: trinity-c2 Not tainted 4.8.0-rc2+ #140
    	...
    	Call Trace:
    		dump_stack
    		kasan_object_err
    		kasan_report_error
    		__asan_report_load2_noabort
    		alloc_pages_current	<-- use after free
    		depot_save_stack
    		save_stack
    		kasan_slab_free
    		kmem_cache_free
    		__mpol_put		<-- free
    		do_exit
    
    This patch sets current->mempolicy to NULL before dropping the final
    reference.
    
    Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1608301442180.63329@chino.kir.corp.google.com
    Fixes: cd11016e ("mm, kasan: stackdepot implementation. Enable stackdepot for SLAB")
    Signed-off-by: David Ri...
    c11600e4
mempolicy.c 71.3 KB