Skip to content

Commit c091fb6

Browse files
author
James Morse
committed
arm64: entry: Move the trampoline data page before the text page
The trampoline code has a data page that holds the address of the vectors, which is unmapped when running in user-space. This ensures that with CONFIG_RANDOMIZE_BASE, the randomised address of the kernel can't be discovered until after the kernel has been mapped. If the trampoline text page is extended to include multiple sets of vectors, it will be larger than a single page, making it tricky to find the data page without knowing the size of the trampoline text pages, which will vary with PAGE_SIZE. Move the data page to appear before the text page. This allows the data page to be found without knowing the size of the trampoline text pages. 'tramp_vectors' is used to refer to the beginning of the .entry.tramp.text section, do that explicitly. Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: James Morse <james.morse@arm.com>
1 parent 03aff3a commit c091fb6

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

arch/arm64/include/asm/fixmap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ enum fixed_addresses {
6262
#endif /* CONFIG_ACPI_APEI_GHES */
6363

6464
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
65-
FIX_ENTRY_TRAMP_DATA,
6665
FIX_ENTRY_TRAMP_TEXT,
66+
FIX_ENTRY_TRAMP_DATA,
6767
#define TRAMP_VALIAS (__fix_to_virt(FIX_ENTRY_TRAMP_TEXT))
6868
#endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */
6969
__end_of_permanent_fixed_addresses,

arch/arm64/kernel/entry.S

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,11 @@ alternative_else_nop_endif
644644
*/
645645
.endm
646646

647+
.macro tramp_data_page dst
648+
adr \dst, .entry.tramp.text
649+
sub \dst, \dst, PAGE_SIZE
650+
.endm
651+
647652
.macro tramp_ventry, regsize = 64
648653
.align 7
649654
1:
@@ -660,7 +665,7 @@ alternative_else_nop_endif
660665
2:
661666
tramp_map_kernel x30
662667
#ifdef CONFIG_RANDOMIZE_BASE
663-
adr x30, tramp_vectors + PAGE_SIZE
668+
tramp_data_page x30
664669
alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
665670
ldr x30, [x30]
666671
#else
@@ -851,7 +856,7 @@ SYM_CODE_START(__sdei_asm_entry_trampoline)
851856
1: str x4, [x1, #(SDEI_EVENT_INTREGS + S_SDEI_TTBR1)]
852857

853858
#ifdef CONFIG_RANDOMIZE_BASE
854-
adr x4, tramp_vectors + PAGE_SIZE
859+
tramp_data_page x4
855860
add x4, x4, #:lo12:__sdei_asm_trampoline_next_handler
856861
ldr x4, [x4]
857862
#else

0 commit comments

Comments
 (0)