Commit a0591b60 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

powerpc/mm: Don't be too strict with _etext alignment on PPC32



Similar to PPC64, accept to map RO data as ROX as a trade off between
between security and memory usage.

Having RO data executable is not a high risk as RO data can't be
modified to forge an exploit.

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/8c4a0d89d944eed984dd941e509614031a5ace2b.1589866984.git.christophe.leroy@csgroup.eu
parent 0c8c2c9c
Loading
Loading
Loading
Loading
+0 −26
Original line number Diff line number Diff line
@@ -778,32 +778,6 @@ config THREAD_SHIFT
	  Used to define the stack size. The default is almost always what you
	  want. Only change this if you know what you are doing.

config ETEXT_SHIFT_BOOL
	bool "Set custom etext alignment" if STRICT_KERNEL_RWX && \
					     (PPC_BOOK3S_32 || PPC_8xx)
	depends on ADVANCED_OPTIONS
	help
	  This option allows you to set the kernel end of text alignment. When
	  RAM is mapped by blocks, the alignment needs to fit the size and
	  number of possible blocks. The default should be OK for most configs.

	  Say N here unless you know what you are doing.

config ETEXT_SHIFT
	int "_etext shift" if ETEXT_SHIFT_BOOL
	range 17 28 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
	range 19 23 if STRICT_KERNEL_RWX && PPC_8xx
	default 17 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
	default 19 if STRICT_KERNEL_RWX && PPC_8xx
	default PPC_PAGE_SHIFT
	help
	  On Book3S 32 (603+), IBATs are used to map kernel text.
	  Smaller is the alignment, greater is the number of necessary IBATs.

	  On 8xx, large pages (512kb or 8M) are used to map kernel linear
	  memory. Aligning to 8M reduces TLB misses as only 8M pages are used
	  in that case.

config DATA_SHIFT_BOOL
	bool "Set custom data alignment" if STRICT_KERNEL_RWX && \
					    (PPC_BOOK3S_32 || PPC_8xx)
+1 −2
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
#include <asm/thread_info.h>

#define STRICT_ALIGN_SIZE	(1 << CONFIG_DATA_SHIFT)
#define ETEXT_ALIGN_SIZE	(1 << CONFIG_ETEXT_SHIFT)

ENTRY(_stext)

@@ -116,7 +115,7 @@ SECTIONS

	} :text

	. = ALIGN(ETEXT_ALIGN_SIZE);
	. = ALIGN(PAGE_SIZE);
	_etext = .;
	PROVIDE32 (etext = .);