On Tue, Oct 06, 2015 at 02:54:53AM -0700, tip-bot for Stephen Smalley wrote: > Commit-ID: e1a58320a38dfa72be48a0f1a3a92273663ba6db > Gitweb: http://git.kernel.org/tip/e1a58320a38dfa72be48a0f1a3a92273663ba6db > Author: Stephen Smalley <s...@tycho.nsa.gov> > AuthorDate: Mon, 5 Oct 2015 12:55:20 -0400 > Committer: Ingo Molnar <mi...@kernel.org> > CommitDate: Tue, 6 Oct 2015 11:11:48 +0200 > > x86/mm: Warn on W^X mappings > > Warn on any residual W+X mappings after setting NX > if DEBUG_WX is enabled. Introduce a separate > X86_PTDUMP_CORE config that enables the code for > dumping the page tables without enabling the debugfs > interface, so that DEBUG_WX can be enabled without > exposing the debugfs interface. Switch EFI_PGT_DUMP > to using X86_PTDUMP_CORE so that it also does not require > enabling the debugfs interface. > > On success it prints this to the kernel log: > > x86/mm: Checked W+X mappings: passed, no W+X pages found. > > On failure it prints a warning and a count of the failed pages: > > ------------[ cut here ]------------ > WARNING: CPU: 1 PID: 1 at arch/x86/mm/dump_pagetables.c:226 > note_page+0x610/0x7b0() > x86/mm: Found insecure W+X mapping at address > ffffffff81755000/__stop___ex_table+0xfa8/0xabfa8 > [...] > Call Trace: > [<ffffffff81380a5f>] dump_stack+0x44/0x55 > [<ffffffff8109d3f2>] warn_slowpath_common+0x82/0xc0 > [<ffffffff8109d48c>] warn_slowpath_fmt+0x5c/0x80 > [<ffffffff8106cfc9>] ? note_page+0x5c9/0x7b0 > [<ffffffff8106d010>] note_page+0x610/0x7b0 > [<ffffffff8106d409>] ptdump_walk_pgd_level_core+0x259/0x3c0 > [<ffffffff8106d5a7>] ptdump_walk_pgd_level_checkwx+0x17/0x20 > [<ffffffff81063905>] mark_rodata_ro+0xf5/0x100 > [<ffffffff817415a0>] ? rest_init+0x80/0x80 > [<ffffffff817415bd>] kernel_init+0x1d/0xe0 > [<ffffffff8174cd1f>] ret_from_fork+0x3f/0x70 > [<ffffffff817415a0>] ? rest_init+0x80/0x80 > ---[ end trace a1f23a1e42a2ac76 ]--- > x86/mm: Checked W+X mappings: FAILED, 171 W+X pages found. > > Signed-off-by: Stephen Smalley <s...@tycho.nsa.gov> > Acked-by: Kees Cook <keesc...@chromium.org> > Cc: Andy Lutomirski <l...@amacapital.net> > Cc: Arjan van de Ven <ar...@linux.intel.com> > Cc: Borislav Petkov <b...@alien8.de> > Cc: Brian Gerst <brge...@gmail.com> > Cc: Denys Vlasenko <dvlas...@redhat.com> > Cc: H. Peter Anvin <h...@zytor.com> > Cc: Linus Torvalds <torva...@linux-foundation.org> > Cc: Mike Galbraith <efa...@gmx.de> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Thomas Gleixner <t...@linutronix.de> > Cc: linux-kernel@vger.kernel.org > Link: > http://lkml.kernel.org/r/1444064120-11450-1-git-send-email-...@tycho.nsa.gov > [ Improved the Kconfig help text and made the new option default-y > if CONFIG_DEBUG_RODATA=y, because it already found buggy mappings, > so we really want people to have this on by default. ] > Signed-off-by: Ingo Molnar <mi...@kernel.org> > --- > arch/x86/Kconfig.debug | 36 +++++++++++++++++++++++++++++++++++- > arch/x86/include/asm/pgtable.h | 7 +++++++ > arch/x86/mm/Makefile | 2 +- > arch/x86/mm/dump_pagetables.c | 42 > +++++++++++++++++++++++++++++++++++++++++- > arch/x86/mm/init_32.c | 2 ++ > arch/x86/mm/init_64.c | 2 ++ > 6 files changed, 88 insertions(+), 3 deletions(-)
... > @@ -381,8 +398,26 @@ void ptdump_walk_pgd_level(struct seq_file *m, pgd_t > *pgd) > /* Flush out the last page */ > st.current_address = normalize_addr(PTRS_PER_PGD*PGD_LEVEL_MULT); > note_page(m, &st, __pgprot(0), 0); > + if (!checkwx) > + return; > + if (st.wx_pages) > + pr_info("x86/mm: Checked W+X mappings: FAILED, %lu W+X pages > found.\n", > + st.wx_pages); > + else > + pr_info("x86/mm: Checked W+X mappings: passed, no W+X pages > found.\n"); Do we really want to issue anything here in the success case? IMO, we should be quiet if the check passes and only scream when something's wrong... -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/