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);
+}
|