mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
arm64: head: Run feature override detection before mapping the kernel
To permit the feature overrides to be taken into account before the KASLR init code runs and the kernel mapping is created, move the detection code to an earlier stage in the boot. In a subsequent patch, this will be taken advantage of by merging the preliminary and permanent mappings of the kernel text and data into a single one that gets created and relocated before start_kernel() is called. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Link: https://lore.kernel.org/r/20240214122845.2033971-53-ardb+git@google.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
30687dec5e
commit
dcfe969a64
@ -375,9 +375,9 @@ SYM_FUNC_START_LOCAL(create_idmap)
|
||||
|
||||
map_memory x0, x1, x3, x6, x7, x3, IDMAP_PGD_ORDER, x10, x11, x12, x13, x14, EXTRA_SHIFT
|
||||
|
||||
/* Remap BSS and the kernel page tables r/w in the ID map */
|
||||
/* Remap [.init].data, BSS and the kernel page tables r/w in the ID map */
|
||||
adrp x1, _text
|
||||
adrp x2, __bss_start
|
||||
adrp x2, __initdata_begin
|
||||
adrp x3, _end
|
||||
bic x4, x2, #SWAPPER_BLOCK_SIZE - 1
|
||||
mov_q x5, SWAPPER_RW_MMUFLAGS
|
||||
@ -491,9 +491,6 @@ SYM_FUNC_START_LOCAL(__primary_switched)
|
||||
#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)
|
||||
bl kasan_early_init
|
||||
#endif
|
||||
mov x0, x20 // pass the full boot status
|
||||
mov x1, x22 // pass the low FDT mapping
|
||||
bl __pi_init_feature_override // Parse cpu feature overrides
|
||||
#ifdef CONFIG_UNWIND_PATCH_PAC_INTO_SCS
|
||||
bl scs_patch_vmlinux
|
||||
#endif
|
||||
@ -772,12 +769,16 @@ SYM_FUNC_START_LOCAL(__primary_switch)
|
||||
bl __pi_memset
|
||||
dsb ishst // Make zero page visible to PTW
|
||||
|
||||
#ifdef CONFIG_RELOCATABLE
|
||||
adrp x23, KERNEL_START
|
||||
and x23, x23, MIN_KIMG_ALIGN - 1
|
||||
adrp x1, early_init_stack
|
||||
mov sp, x1
|
||||
mov x29, xzr
|
||||
mov x0, x20 // pass the full boot status
|
||||
mov x1, x22 // pass the low FDT mapping
|
||||
bl __pi_init_feature_override // Parse cpu feature overrides
|
||||
|
||||
#ifdef CONFIG_RELOCATABLE
|
||||
adrp x23, KERNEL_START
|
||||
and x23, x23, MIN_KIMG_ALIGN - 1
|
||||
#ifdef CONFIG_RANDOMIZE_BASE
|
||||
mov x0, x22
|
||||
bl __pi_kaslr_early_init
|
||||
|
@ -320,10 +320,8 @@ SECTIONS
|
||||
init_pg_end = .;
|
||||
/* end of zero-init region */
|
||||
|
||||
#ifdef CONFIG_RELOCATABLE
|
||||
. += SZ_4K; /* stack for the early relocation code */
|
||||
. += SZ_4K; /* stack for the early C runtime */
|
||||
early_init_stack = .;
|
||||
#endif
|
||||
|
||||
. = ALIGN(SEGMENT_ALIGN);
|
||||
__pecoff_data_size = ABSOLUTE(. - __initdata_begin);
|
||||
|
Loading…
Reference in New Issue
Block a user