Revert "msm: Make CONFIG_STRICT_MEMORY_RWX even stricter"
This reverts commit a9c567fb0f057b09aa8eef9d01a5182c606ffb0b
Change-Id: I68ec00bb5b24466ef591d1d4ef150d2bf96a816d
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
index 96933a3..7d767c3 100644
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -93,9 +93,6 @@
_text = .;
HEAD_TEXT
}
-#ifdef CONFIG_STRICT_MEMORY_RWX
- . = ALIGN(1<<SECTION_SHIFT);
-#endif
.text : { /* Real text segment */
_stext = .; /* Text and read-only data */
@@ -118,10 +115,10 @@
*(.got) /* Global offset table */
ARM_CPU_KEEP(PROC_INFO)
}
-
#ifdef CONFIG_STRICT_MEMORY_RWX
. = ALIGN(1<<SECTION_SHIFT);
#endif
+
RO_DATA(PAGE_SIZE)
#ifdef CONFIG_ARM_UNWIND
@@ -159,9 +156,6 @@
.init.proc.info : {
ARM_CPU_DISCARD(PROC_INFO)
}
-#ifdef CONFIG_STRICT_MEMORY_RWX
- . = ALIGN(1<<SECTION_SHIFT);
-#endif
.init.arch.info : {
__arch_info_begin = .;
*(.arch.info.init)
@@ -196,6 +190,10 @@
INIT_RAM_FS
}
#ifndef CONFIG_XIP_KERNEL
+#ifdef CONFIG_STRICT_MEMORY_RWX
+ . = ALIGN(1<<SECTION_SHIFT);
+#endif
+ __init_data = .;
.exit.data : {
ARM_EXIT_KEEP(EXIT_DATA)
}
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index a8a4a8e..56c37b7 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -841,14 +841,6 @@
"TCM link");
#endif
-#ifdef CONFIG_STRICT_MEMORY_RWX
- poison_init_mem((char *)__arch_info_begin,
- __init_end - (char *)__arch_info_begin);
- reclaimed_initmem = free_area(__phys_to_pfn(__pa(__arch_info_begin)),
- __phys_to_pfn(__pa(__init_end)),
- "init");
- totalram_pages += reclaimed_initmem;
-#else
poison_init_mem(__init_begin, __init_end - __init_begin);
if (!machine_is_integrator() && !machine_is_cintegrator()) {
reclaimed_initmem = free_area(__phys_to_pfn(__pa(__init_begin)),
@@ -856,7 +848,6 @@
"init");
totalram_pages += reclaimed_initmem;
}
-#endif
}
#ifdef CONFIG_BLK_DEV_INITRD
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 1072d6a..a6827fb 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -1315,6 +1315,8 @@
}
EXPORT_SYMBOL(mem_text_write_kernel_word);
+extern char __init_data[];
+
static void __init map_lowmem(void)
{
struct memblock_region *reg;
@@ -1337,7 +1339,7 @@
#ifdef CONFIG_STRICT_MEMORY_RWX
if (start <= __pa(_text) && __pa(_text) < end) {
map.length = SECTION_SIZE;
- map.type = MT_MEMORY_RW;
+ map.type = MT_MEMORY;
create_mapping(&map, false);
@@ -1357,15 +1359,14 @@
map.pfn = __phys_to_pfn(__pa(__init_begin));
map.virtual = (unsigned long)__init_begin;
- map.length = (char *)__arch_info_begin - __init_begin;
- map.type = MT_MEMORY_RX;
+ map.length = __init_data - __init_begin;
+ map.type = MT_MEMORY;
create_mapping(&map, false);
- map.pfn = __phys_to_pfn(__pa(__arch_info_begin));
- map.virtual = (unsigned long)__arch_info_begin;
- map.length = __phys_to_virt(end) -
- (unsigned long)__arch_info_begin;
+ map.pfn = __phys_to_pfn(__pa(__init_data));
+ map.virtual = (unsigned long)__init_data;
+ map.length = __phys_to_virt(end) - (unsigned int)__init_data;
map.type = MT_MEMORY_RW;
} else {
map.length = end - start;