From: Thomas M. <th...@m3...> - 2017-05-24 21:35:06
|
Signed-off-by: Thomas Meyer <th...@m3...> --- arch/um/Kconfig.common | 1 + arch/um/kernel/mem.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/um/Kconfig.common b/arch/um/Kconfig.common index 85f6dd2..061009b 100644 --- a/arch/um/Kconfig.common +++ b/arch/um/Kconfig.common @@ -2,6 +2,7 @@ config UML bool default y select ARCH_HAS_KCOV + select ARCH_HAS_STRICT_KERNEL_RWX select HAVE_ARCH_AUDITSYSCALL select HAVE_ARCH_SECCOMP_FILTER select HAVE_UID16 diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c index e7437ec..8705eff 100644 --- a/arch/um/kernel/mem.c +++ b/arch/um/kernel/mem.c @@ -12,6 +12,7 @@ #include <linux/slab.h> #include <asm/fixmap.h> #include <asm/page.h> +#include <asm/sections.h> #include <as-layout.h> #include <init.h> #include <kern.h> @@ -168,7 +169,6 @@ void __init paging_init(void) * This can't do anything because nothing in the kernel image can be freed * since it's not in kernel physical memory. */ - void free_initmem(void) { } @@ -238,3 +238,14 @@ void *uml_kmalloc(int size, int flags) { return kmalloc(size, flags); } + +void mark_rodata_ro(void) +{ + /* rodata_start/end must be PAGE_SIZE aligend! */ + unsigned long rodata_start = (unsigned long) __start_rodata; + unsigned long rodata_end = (unsigned long) __end_rodata; + + printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n", + (rodata_end - rodata_start) >> 10); + os_protect_memory((void*)rodata_start, (rodata_end - rodata_start), 1, 0, 0); +} |