Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d92fcbe3 authored by Kees Cook's avatar Kees Cook Committed by Sami Tolvanen
Browse files

UPSTREAM: x86/vmlinux: Actually use _etext for the end of the text segment



Various calculations are using the end of the exception table (which
does not need to be executable) as the end of the text segment. Instead,
in preparation for moving the exception table into RO_DATA, move _etext
after the exception table and update the calculations.

Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-c6x-dev@linux-c6x.org
Cc: linux-ia64@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-s390@vger.kernel.org
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rick Edgecombe <rick.p.edgecombe@intel.com>
Cc: Ross Zwisler <zwisler@chromium.org>
Cc: Segher Boessenkool <segher@kernel.crashing.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Lendacky <Thomas.Lendacky@amd.com>
Cc: Will Deacon <will@kernel.org>
Cc: x86-ml <x86@kernel.org>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Link: https://lkml.kernel.org/r/20191029211351.13243-16-keescook@chromium.org


(cherry picked from commit b907693883fdcff5b492cf0cd02a0e264623055e)
Bug: 145297900
Change-Id: I922603ddd5c9db930059c682526c51d2181b858a
Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
parent b0b02162
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@
#include <asm/extable.h>

extern char __brk_base[], __brk_limit[];
extern struct exception_table_entry __stop___ex_table[];
extern char __end_rodata_aligned[];

#if defined(CONFIG_X86_64)
+3 −4
Original line number Diff line number Diff line
@@ -141,17 +141,16 @@ SECTIONS
		*(.text.__x86.indirect_thunk)
		__indirect_thunk_end = .;
#endif

		/* End of text section */
		_etext = .;
	} :text = 0x9090

	NOTES :text :note

	EXCEPTION_TABLE(16) :text = 0x9090

	/* .text should occupy whole number of pages */
	/* End of text section, which should occupy whole number of pages */
	_etext = .;
	. = ALIGN(PAGE_SIZE);

	X86_ALIGN_RODATA_BEGIN
	RO_DATA(PAGE_SIZE)
	X86_ALIGN_RODATA_END
+3 −3
Original line number Diff line number Diff line
@@ -1261,7 +1261,7 @@ int kernel_set_to_readonly;
void set_kernel_text_rw(void)
{
	unsigned long start = PFN_ALIGN(_text);
	unsigned long end = PFN_ALIGN(__stop___ex_table);
	unsigned long end = PFN_ALIGN(_etext);

	if (!kernel_set_to_readonly)
		return;
@@ -1280,7 +1280,7 @@ void set_kernel_text_rw(void)
void set_kernel_text_ro(void)
{
	unsigned long start = PFN_ALIGN(_text);
	unsigned long end = PFN_ALIGN(__stop___ex_table);
	unsigned long end = PFN_ALIGN(_etext);

	if (!kernel_set_to_readonly)
		return;
@@ -1299,7 +1299,7 @@ void mark_rodata_ro(void)
	unsigned long start = PFN_ALIGN(_text);
	unsigned long rodata_start = PFN_ALIGN(__start_rodata);
	unsigned long end = (unsigned long) &__end_rodata_hpage_align;
	unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
	unsigned long text_end = PFN_ALIGN(&_etext);
	unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
	unsigned long all_end;

+1 −1
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ static void pti_clone_kernel_text(void)
	 */
	unsigned long start = PFN_ALIGN(_text);
	unsigned long end_clone  = (unsigned long)__end_rodata_aligned;
	unsigned long end_global = PFN_ALIGN((unsigned long)__stop___ex_table);
	unsigned long end_global = PFN_ALIGN((unsigned long)_etext);

	if (!pti_kernel_image_global_ok())
		return;