Revert "Revert "arm: mm: restrict kernel memory permissions if CONFIG_STRICT_MEMORY_RWX set""
This reverts commit b45243a26a1a3bee14b3ff506a61d1eb3cb80e76.
Signed-off-by: Jin Hong <jinh@codeaurora.org>
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index fb48d30..350e5a9 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1045,8 +1045,39 @@
map.pfn = __phys_to_pfn(start);
map.virtual = __phys_to_virt(start);
+#ifdef CONFIG_STRICT_MEMORY_RWX
+ if (start <= __pa(_text) && __pa(_text) < end) {
+ map.length = (unsigned long)_text - map.virtual;
+ map.type = MT_MEMORY;
+
+ create_mapping(&map);
+
+ map.pfn = __phys_to_pfn(__pa(_text));
+ map.virtual = (unsigned long)_text;
+ map.length = __start_rodata - _text;
+ map.type = MT_MEMORY_RX;
+
+ create_mapping(&map);
+
+ map.pfn = __phys_to_pfn(__pa(__start_rodata));
+ map.virtual = (unsigned long)__start_rodata;
+ map.length = _sdata - __start_rodata;
+ map.type = MT_MEMORY_R;
+
+ create_mapping(&map);
+
+ map.pfn = __phys_to_pfn(__pa(_sdata));
+ map.virtual = (unsigned long)_sdata;
+ map.length = __phys_to_virt(end) - (unsigned int)_sdata;
+ map.type = MT_MEMORY_RW;
+ } else {
+ map.length = end - start;
+ map.type = MT_MEMORY_RW;
+ }
+#else
map.length = end - start;
map.type = MT_MEMORY;
+#endif
create_mapping(&map);
}