Messages in this thread | | | From | Kees Cook <> | Date | Mon, 30 Apr 2018 11:40:42 -0700 | Subject | Re: [PATCH v3] init: Fix false positives in W+X checking |
| |
On Mon, Apr 30, 2018 at 10:19 AM, Laura Abbott <labbott@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 <timur@codeaurora.org> >> Reported-by: Jan Glauber <jan.glauber@caviumnetworks.com> >> Fixes: e1a58320a38d ("x86/mm: Warn on W^X mappings") >> Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org> >> Acked-by: Kees Cook <keescook@chromium.org> >> Acked-by: Ingo Molnar <mingo@kernel.org> >> Acked-by: Will Deacon <will.deacon@arm.com> >> --- >> > > Acked-by: Laura Abbott <labbott@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
| |