Commit 4b19f96a authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/32s: Don't warn when mapping RO data ROX.

Mapping RO data as ROX is not an issue since that data
cannot be modified to introduce an exploit.

PPC64 accepts to have RO data mapped ROX, as a trade off
between kernel size and strictness of protection.

On PPC32, kernel size is even more critical as amount of
memory is usually small.

Depending on the number of available IBATs, the last IBATs
might overflow the end of text. Only warn if it crosses
the end of RO data.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/6499f8eeb2a36330e5c9fc1cee9a79374875bd54.1589866984.git.christophe.leroy@csgroup.eu
parent 6b789a26
...@@ -187,6 +187,7 @@ void mmu_mark_initmem_nx(void) ...@@ -187,6 +187,7 @@ void mmu_mark_initmem_nx(void)
int i; int i;
unsigned long base = (unsigned long)_stext - PAGE_OFFSET; unsigned long base = (unsigned long)_stext - PAGE_OFFSET;
unsigned long top = (unsigned long)_etext - PAGE_OFFSET; unsigned long top = (unsigned long)_etext - PAGE_OFFSET;
unsigned long border = (unsigned long)__init_begin - PAGE_OFFSET;
unsigned long size; unsigned long size;
if (IS_ENABLED(CONFIG_PPC_BOOK3S_601)) if (IS_ENABLED(CONFIG_PPC_BOOK3S_601))
...@@ -201,9 +202,10 @@ void mmu_mark_initmem_nx(void) ...@@ -201,9 +202,10 @@ void mmu_mark_initmem_nx(void)
size = block_size(base, top); size = block_size(base, top);
size = max(size, 128UL << 10); size = max(size, 128UL << 10);
if ((top - base) > size) { if ((top - base) > size) {
if (strict_kernel_rwx_enabled())
pr_warn("Kernel _etext not properly aligned\n");
size <<= 1; size <<= 1;
if (strict_kernel_rwx_enabled() && base + size > border)
pr_warn("Some RW data is getting mapped X. "
"Adjust CONFIG_DATA_SHIFT to avoid that.\n");
} }
setibat(i++, PAGE_OFFSET + base, base, size, PAGE_KERNEL_TEXT); setibat(i++, PAGE_OFFSET + base, base, size, PAGE_KERNEL_TEXT);
base += size; base += size;
......
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