Commit 592e15f6 authored by Christophe Leroy's avatar Christophe Leroy Committed by Andrew Morton

powerpc,s390: ptdump: define ptdump_check_wx() regardless of CONFIG_DEBUG_WX

Following patch will use ptdump_check_wx() regardless of CONFIG_DEBUG_WX,
so define it at all times on powerpc and s390 just like other
architectures.  Though keep the WARN_ON_ONCE() only when CONFIG_DEBUG_WX
is set.

Link: https://lkml.kernel.org/r/07bfb04c7fec58e84413e91d2533581be357a696.1706610398.git.christophe.leroy@csgroup.euSigned-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexandre Ghiti <alexghiti@rivosinc.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: "Aneesh Kumar K.V (IBM)" <aneesh.kumar@kernel.org>
Cc: Borislav Petkov (AMD) <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christian Borntraeger <borntraeger@linux.ibm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Cc: Greg KH <greg@kroah.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: "Naveen N. Rao" <naveen.n.rao@linux.ibm.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Phong Tran <tranmanphong@gmail.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Steven Price <steven.price@arm.com>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent a5e8131a
...@@ -184,13 +184,14 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr) ...@@ -184,13 +184,14 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
{ {
pte_t pte = __pte(st->current_flags); pte_t pte = __pte(st->current_flags);
if (!IS_ENABLED(CONFIG_DEBUG_WX) || !st->check_wx) if (!st->check_wx)
return; return;
if (!pte_write(pte) || !pte_exec(pte)) if (!pte_write(pte) || !pte_exec(pte))
return; return;
WARN_ONCE(1, "powerpc/mm: Found insecure W+X mapping at address %p/%pS\n", WARN_ONCE(IS_ENABLED(CONFIG_DEBUG_WX),
"powerpc/mm: Found insecure W+X mapping at address %p/%pS\n",
(void *)st->start_address, (void *)st->start_address); (void *)st->start_address, (void *)st->start_address);
st->wx_pages += (addr - st->start_address) / PAGE_SIZE; st->wx_pages += (addr - st->start_address) / PAGE_SIZE;
...@@ -326,7 +327,6 @@ static void __init build_pgtable_complete_mask(void) ...@@ -326,7 +327,6 @@ static void __init build_pgtable_complete_mask(void)
pg_level[i].mask |= pg_level[i].flag[j].mask; pg_level[i].mask |= pg_level[i].flag[j].mask;
} }
#ifdef CONFIG_DEBUG_WX
void ptdump_check_wx(void) void ptdump_check_wx(void)
{ {
struct pg_state st = { struct pg_state st = {
...@@ -354,7 +354,6 @@ void ptdump_check_wx(void) ...@@ -354,7 +354,6 @@ void ptdump_check_wx(void)
else else
pr_info("Checked W+X mappings: passed, no W+X pages found\n"); pr_info("Checked W+X mappings: passed, no W+X pages found\n");
} }
#endif
static int __init ptdump_init(void) static int __init ptdump_init(void)
{ {
......
...@@ -121,7 +121,6 @@ static void print_prot(struct seq_file *m, unsigned int pr, int level) ...@@ -121,7 +121,6 @@ static void print_prot(struct seq_file *m, unsigned int pr, int level)
static void note_prot_wx(struct pg_state *st, unsigned long addr) static void note_prot_wx(struct pg_state *st, unsigned long addr)
{ {
#ifdef CONFIG_DEBUG_WX
if (!st->check_wx) if (!st->check_wx)
return; return;
if (st->current_prot & _PAGE_INVALID) if (st->current_prot & _PAGE_INVALID)
...@@ -138,10 +137,10 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr) ...@@ -138,10 +137,10 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
*/ */
if (addr == PAGE_SIZE && (nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear))) if (addr == PAGE_SIZE && (nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear)))
return; return;
WARN_ONCE(1, "s390/mm: Found insecure W+X mapping at address %pS\n", WARN_ONCE(IS_ENABLED(CONFIG_DEBUG_WX),
"s390/mm: Found insecure W+X mapping at address %pS\n",
(void *)st->start_address); (void *)st->start_address);
st->wx_pages += (addr - st->start_address) / PAGE_SIZE; st->wx_pages += (addr - st->start_address) / PAGE_SIZE;
#endif /* CONFIG_DEBUG_WX */
} }
static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, u64 val) static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, u64 val)
...@@ -193,7 +192,6 @@ static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, ...@@ -193,7 +192,6 @@ static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level,
} }
} }
#ifdef CONFIG_DEBUG_WX
void ptdump_check_wx(void) void ptdump_check_wx(void)
{ {
struct pg_state st = { struct pg_state st = {
...@@ -226,7 +224,6 @@ void ptdump_check_wx(void) ...@@ -226,7 +224,6 @@ void ptdump_check_wx(void)
(nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear)) ? (nospec_uses_trampoline() || !static_key_enabled(&cpu_has_bear)) ?
"unexpected " : ""); "unexpected " : "");
} }
#endif /* CONFIG_DEBUG_WX */
#ifdef CONFIG_PTDUMP_DEBUGFS #ifdef CONFIG_PTDUMP_DEBUGFS
static int ptdump_show(struct seq_file *m, void *v) static int ptdump_show(struct seq_file *m, void *v)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment