Skip to content

Commit 33bd8d1

Browse files
hcahcaVasily Gorbik
authored andcommitted
s390: Keep inittext section writable
There is no added security by making the inittext section non-writable, however it does split part of the kernel mapping into 4K mappings instead of 1M mappings: ---[ Kernel Image Start ]--- 0x000003ffe0000000-0x000003ffe0e00000 14M PMD RO X 0x000003ffe0e00000-0x000003ffe0ec7000 796K PTE RO X 0x000003ffe0ec7000-0x000003ffe0f00000 228K PTE RO NX 0x000003ffe0f00000-0x000003ffe1300000 4M PMD RO NX 0x000003ffe1300000-0x000003ffe1353000 332K PTE RO NX 0x000003ffe1353000-0x000003ffe1400000 692K PTE RW NX 0x000003ffe1400000-0x000003ffe1500000 1M PMD RW NX 0x000003ffe1500000-0x000003ffe1700000 2M PTE RW NX <--- 0x000003ffe1700000-0x000003ffe1800000 1M PMD RW NX 0x000003ffe1800000-0x000003ffe187e000 504K PTE RW NX ---[ Kernel Image End ]--- Keep the inittext writable and enable instruction execution protection (aka noexec) later to prevent this. This also allows to use the generic free_initmem() implementation. ---[ Kernel Image Start ]--- 0x000003ffe0000000-0x000003ffe0e00000 14M PMD RO X 0x000003ffe0e00000-0x000003ffe0ec7000 796K PTE RO X 0x000003ffe0ec7000-0x000003ffe0f00000 228K PTE RO NX 0x000003ffe0f00000-0x000003ffe1300000 4M PMD RO NX 0x000003ffe1300000-0x000003ffe1353000 332K PTE RO NX 0x000003ffe1353000-0x000003ffe1400000 692K PTE RW NX 0x000003ffe1400000-0x000003ffe1800000 4M PMD RW NX <--- 0x000003ffe1800000-0x000003ffe187e000 504K PTE RW NX ---[ Kernel Image End ]--- Reviewed-by: Alexander Gordeev <[email protected]> Signed-off-by: Heiko Carstens <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent 75c10d5 commit 33bd8d1

File tree

2 files changed

+2
-10
lines changed

2 files changed

+2
-10
lines changed

arch/s390/mm/init.c

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ void mark_rodata_ro(void)
108108
{
109109
unsigned long size = __end_ro_after_init - __start_ro_after_init;
110110

111+
if (MACHINE_HAS_NX)
112+
system_ctl_set_bit(0, CR0_INSTRUCTION_EXEC_PROTECTION_BIT);
111113
__set_memory_ro(__start_ro_after_init, __end_ro_after_init);
112114
pr_info("Write protected read-only-after-init data: %luk\n", size >> 10);
113115
}
@@ -170,13 +172,6 @@ void __init mem_init(void)
170172
setup_zero_pages(); /* Setup zeroed pages. */
171173
}
172174

173-
void free_initmem(void)
174-
{
175-
set_memory_rwnx((unsigned long)_sinittext,
176-
(unsigned long)(_einittext - _sinittext) >> PAGE_SHIFT);
177-
free_initmem_default(POISON_FREE_INITMEM);
178-
}
179-
180175
unsigned long memory_block_size_bytes(void)
181176
{
182177
/*

arch/s390/mm/vmem.c

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,7 +661,6 @@ void __init vmem_map_init(void)
661661
{
662662
__set_memory_rox(_stext, _etext);
663663
__set_memory_ro(_etext, __end_rodata);
664-
__set_memory_rox(_sinittext, _einittext);
665664
__set_memory_rox(__stext_amode31, __etext_amode31);
666665
/*
667666
* If the BEAR-enhancement facility is not installed the first
@@ -672,8 +671,6 @@ void __init vmem_map_init(void)
672671
set_memory_x(0, 1);
673672
if (debug_pagealloc_enabled())
674673
__set_memory_4k(__va(0), __va(0) + ident_map_size);
675-
if (MACHINE_HAS_NX)
676-
system_ctl_set_bit(0, CR0_INSTRUCTION_EXEC_PROTECTION_BIT);
677674
pr_info("Write protected kernel read-only data: %luk\n",
678675
(unsigned long)(__end_rodata - _stext) >> 10);
679676
}

0 commit comments

Comments
 (0)