aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2016-06-07 06:20:51 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-06-13 09:58:22 -0400
commit32fb2fc5c357fb99616bbe100dbcb27bc7f5d045 (patch)
tree81e8a21e7687debcaf46d1af635f64c863262aeb /include/asm-generic
parent64f31d5802af11fd87872b4bae07b35cf0acb358 (diff)
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: Heiko Carstens <heiko.carstens@de.ibm.com> Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/vmlinux.lds.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 6a67ab94b553..c4436d072d37 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -250,6 +250,14 @@
250 VMLINUX_SYMBOL(__end_init_task) = .; 250 VMLINUX_SYMBOL(__end_init_task) = .;
251 251
252/* 252/*
253 * Allow architectures to handle ro_after_init data on their
254 * own by defining an empty RO_AFTER_INIT_DATA.
255 */
256#ifndef RO_AFTER_INIT_DATA
257#define RO_AFTER_INIT_DATA *(.data..ro_after_init)
258#endif
259
260/*
253 * Read only Data 261 * Read only Data
254 */ 262 */
255#define RO_DATA_SECTION(align) \ 263#define RO_DATA_SECTION(align) \
@@ -257,7 +265,7 @@
257 .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ 265 .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
258 VMLINUX_SYMBOL(__start_rodata) = .; \ 266 VMLINUX_SYMBOL(__start_rodata) = .; \
259 *(.rodata) *(.rodata.*) \ 267 *(.rodata) *(.rodata.*) \
260 *(.data..ro_after_init) /* Read only after init */ \ 268 RO_AFTER_INIT_DATA /* Read only after init */ \
261 *(__vermagic) /* Kernel version magic */ \ 269 *(__vermagic) /* Kernel version magic */ \
262 . = ALIGN(8); \ 270 . = ALIGN(8); \
263 VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ 271 VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \