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

Commit 609abcd0 authored by Heiko Carstens's avatar Heiko Carstens Committed by Sami Tolvanen
Browse files

UPSTREAM: vmlinux.lds.h: allow arch specific handling of ro_after_init data section



commit c74ba8b3480d ("arch: Introduce post-init read-only memory")
introduced the __ro_after_init attribute which allows to add variables
to the ro_after_init data section.

This new section was added to rodata, even though it contains writable
data. This in turn causes problems on architectures which mark the
page table entries read-only that point to rodata very early.

This patch allows architectures to implement an own handling of the
.data..ro_after_init section.
Usually that would be:
- mark the rodata section read-only very early
- mark the ro_after_init section read-only within mark_rodata_ro

Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>

Bug: 31660652
Change-Id: If68cb4d86f88678c9bac8c47072775ab85ef5770
(cherry picked from commit 32fb2fc5c357fb99616bbe100dbcb27bc7f5d045)
Signed-off-by: default avatarSami Tolvanen <samitolvanen@google.com>
parent 3cfedbe6
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -248,6 +248,14 @@
	. = ALIGN(align);						\
	*(.data..init_task)

/*
 * Allow architectures to handle ro_after_init data on their
 * own by defining an empty RO_AFTER_INIT_DATA.
 */
#ifndef RO_AFTER_INIT_DATA
#define RO_AFTER_INIT_DATA *(.data..ro_after_init)
#endif

/*
 * Read only Data
 */
@@ -256,7 +264,7 @@
	.rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {		\
		VMLINUX_SYMBOL(__start_rodata) = .;			\
		*(.rodata) *(.rodata.*)					\
		*(.data..ro_after_init)	/* Read only after init */	\
		RO_AFTER_INIT_DATA	/* Read only after init */	\
		*(__vermagic)		/* Kernel version magic */	\
		. = ALIGN(8);						\
		VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .;		\