jump_table: Move entries into ro_after_init region
The __jump_table sections emitted into the core kernel and into each module consist of statically initialized references into other parts of the code, and with the exception of entries that point into init code, which are defused at post-init time, these data structures are never modified. So let's move them into the ro_after_init section, to prevent them from being corrupted inadvertently by buggy code, or deliberately by an attacker. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Kees Cook <keescook@chromium.org> Acked-by: Jessica Yu <jeyu@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-s390@vger.kernel.org Cc: Arnd Bergmann <arnd@arndb.de> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Link: https://lkml.kernel.org/r/20180919065144.25010-9-ard.biesheuvel@linaro.org
This commit is contained in:

committed by
Thomas Gleixner

parent
1948367768
commit
e872267b8b
@@ -253,10 +253,6 @@
|
||||
STRUCT_ALIGN(); \
|
||||
*(__tracepoints) \
|
||||
/* implement dynamic printk debug */ \
|
||||
. = ALIGN(8); \
|
||||
__start___jump_table = .; \
|
||||
KEEP(*(__jump_table)) \
|
||||
__stop___jump_table = .; \
|
||||
. = ALIGN(8); \
|
||||
__start___verbose = .; \
|
||||
KEEP(*(__verbose)) \
|
||||
@@ -300,6 +296,12 @@
|
||||
. = __start_init_task + THREAD_SIZE; \
|
||||
__end_init_task = .;
|
||||
|
||||
#define JUMP_TABLE_DATA \
|
||||
. = ALIGN(8); \
|
||||
__start___jump_table = .; \
|
||||
KEEP(*(__jump_table)) \
|
||||
__stop___jump_table = .;
|
||||
|
||||
/*
|
||||
* Allow architectures to handle ro_after_init data on their
|
||||
* own by defining an empty RO_AFTER_INIT_DATA.
|
||||
@@ -308,6 +310,7 @@
|
||||
#define RO_AFTER_INIT_DATA \
|
||||
__start_ro_after_init = .; \
|
||||
*(.data..ro_after_init) \
|
||||
JUMP_TABLE_DATA \
|
||||
__end_ro_after_init = .;
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user