On Mon, Apr 30, 2018 at 10:19 AM, Laura Abbott <labb...@redhat.com> wrote: > On 04/30/2018 08:59 AM, Jeffrey Hugo wrote: >> >> load_module() creates W+X mappings via __vmalloc_node_range() (from >> layout_and_allocate()->move_module()->module_alloc()) by using >> PAGE_KERNEL_EXEC. These mappings are later cleaned up via >> "call_rcu_sched(&freeinit->rcu, do_free_init)" from do_init_module(). >> >> This is a problem because call_rcu_sched() queues work, which can be run >> after debug_checkwx() is run, resulting in a race condition. If hit, the >> race results in a nasty splat about insecure W+X mappings, which results >> in a poor user experience as these are not the mappings that >> debug_checkwx() is intended to catch. >> >> This issue is observed on multiple arm64 platforms, and has been >> artificially triggered on an x86 platform. >> >> Address the race by flushing the queued work before running the >> arch-defined mark_rodata_ro() which then calls debug_checkwx(). >> >> Reported-by: Timur Tabi <ti...@codeaurora.org> >> Reported-by: Jan Glauber <jan.glau...@caviumnetworks.com> >> Fixes: e1a58320a38d ("x86/mm: Warn on W^X mappings") >> Signed-off-by: Jeffrey Hugo <jh...@codeaurora.org> >> Acked-by: Kees Cook <keesc...@chromium.org> >> Acked-by: Ingo Molnar <mi...@kernel.org> >> Acked-by: Will Deacon <will.dea...@arm.com> >> --- >> > > Acked-by: Laura Abbott <labb...@redhat.com> > > If you don't have a tree for this to go through, I might suggest having > Kees take it.
akpm has taken the W^X stuff in the past, but I'm happy to do so. Just let me know either way. :) -Kees -- Kees Cook Pixel Security