Skip to content

Commit 32db401

Browse files
Alexander GordeevVasily Gorbik
authored andcommitted
s390/mm: Pin identity mapping base to zero
SIE instruction performs faster when the virtual address of SIE block matches the physical one. Pin the identity mapping base to zero for the benefit of SIE and other instructions that have similar performance impact. Still, randomize the base when DEBUG_VM kernel configuration option is enabled. Suggested-by: Vasily Gorbik <[email protected]> Reviewed-by: Christian Borntraeger <[email protected]> Signed-off-by: Alexander Gordeev <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent a3ca27c commit 32db401

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

arch/s390/Kconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,19 @@ config RANDOMIZE_BASE
604604
as a security feature that deters exploit attempts relying on
605605
knowledge of the location of kernel internals.
606606

607+
config RANDOMIZE_IDENTITY_BASE
608+
bool "Randomize the address of the identity mapping base"
609+
depends on RANDOMIZE_BASE
610+
default DEBUG_VM
611+
help
612+
The identity mapping base address is pinned to zero by default.
613+
Allow randomization of that base to expose otherwise missed
614+
notion of physical and virtual addresses of data structures.
615+
That does not have any impact on the base address at which the
616+
kernel image is loaded.
617+
618+
If unsure, say N
619+
607620
config KERNEL_IMAGE_BASE
608621
hex "Kernel image base address"
609622
range 0x100000 0x1FFFFFE0000000 if !KASAN

arch/s390/boot/startup.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,8 @@ static unsigned long setup_kernel_memory_layout(unsigned long kernel_size)
341341
BUILD_BUG_ON(MAX_DCSS_ADDR > (1UL << MAX_PHYSMEM_BITS));
342342
max_mappable = max(ident_map_size, MAX_DCSS_ADDR);
343343
max_mappable = min(max_mappable, vmemmap_start);
344-
__identity_base = round_down(vmemmap_start - max_mappable, rte_size);
344+
if (IS_ENABLED(CONFIG_RANDOMIZE_IDENTITY_BASE))
345+
__identity_base = round_down(vmemmap_start - max_mappable, rte_size);
345346

346347
return asce_limit;
347348
}

0 commit comments

Comments
 (0)