Commit dcfe969a authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Catalin Marinas
Browse files

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: default avatarArd Biesheuvel <ardb@kernel.org>
Link: https://lore.kernel.org/r/20240214122845.2033971-53-ardb+git@google.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 30687dec
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -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
+1 −3
Original line number Diff line number Diff line
@@ -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);