mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: stable@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, james.morse@arm.com,
	catalin.marinas@arm.com
Subject: [stable:PATCH v4.19.235 07/22] arm64: entry: Move the trampoline data page before the text page
Date: Fri, 18 Mar 2022 17:48:27 +0000	[thread overview]
Message-ID: <20220318174842.2321061-8-james.morse@arm.com> (raw)
In-Reply-To: <20220318174842.2321061-1-james.morse@arm.com>

commit c091fb6ae059cda563b2a4d93fdbc548ef34e1d6 upstream.

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>
---
 arch/arm64/include/asm/fixmap.h | 2 +-
 arch/arm64/kernel/entry.S       | 9 +++++++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/include/asm/fixmap.h b/arch/arm64/include/asm/fixmap.h
index ec1e6d6fa14c..c0cfc6d3bf9f 100644
--- a/arch/arm64/include/asm/fixmap.h
+++ b/arch/arm64/include/asm/fixmap.h
@@ -59,8 +59,8 @@ enum fixed_addresses {
 #endif /* CONFIG_ACPI_APEI_GHES */
 
 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
-	FIX_ENTRY_TRAMP_DATA,
 	FIX_ENTRY_TRAMP_TEXT,
+	FIX_ENTRY_TRAMP_DATA,
 #define TRAMP_VALIAS		(__fix_to_virt(FIX_ENTRY_TRAMP_TEXT))
 #endif /* CONFIG_UNMAP_KERNEL_AT_EL0 */
 	__end_of_permanent_fixed_addresses,
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 16988a9d1d19..1df718f53a1f 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -967,6 +967,11 @@ alternative_else_nop_endif
 	 */
 	.endm
 
+	.macro tramp_data_page	dst
+	adr	\dst, .entry.tramp.text
+	sub	\dst, \dst, PAGE_SIZE
+	.endm
+
 	.macro tramp_ventry, regsize = 64
 	.align	7
 1:
@@ -983,7 +988,7 @@ alternative_else_nop_endif
 2:
 	tramp_map_kernel	x30
 #ifdef CONFIG_RANDOMIZE_BASE
-	adr	x30, tramp_vectors + PAGE_SIZE
+	tramp_data_page		x30
 alternative_insn isb, nop, ARM64_WORKAROUND_QCOM_FALKOR_E1003
 	ldr	x30, [x30]
 #else
@@ -1131,7 +1136,7 @@ ENTRY(__sdei_asm_entry_trampoline)
 1:	str	x4, [x1, #(SDEI_EVENT_INTREGS + S_ORIG_ADDR_LIMIT)]
 
 #ifdef CONFIG_RANDOMIZE_BASE
-	adr	x4, tramp_vectors + PAGE_SIZE
+	tramp_data_page		x4
 	add	x4, x4, #:lo12:__sdei_asm_trampoline_next_handler
 	ldr	x4, [x4]
 #else
-- 
2.30.2


  parent reply	other threads:[~2022-03-18 17:50 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-18 17:48 [stable:PATCH v4.19.235 00/22] arm64: Mitigate spectre style branch history side channels James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 01/22] arm64: Add part number for Arm Cortex-A77 James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 02/22] arm64: Add Neoverse-N2, Cortex-A710 CPU part definition James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 03/22] arm64: Add Cortex-X2 " James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 04/22] arm64: entry.S: Add ventry overflow sanity checks James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 05/22] arm64: entry: Make the trampoline cleanup optional James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 06/22] arm64: entry: Free up another register on kpti's tramp_exit path James Morse
2022-03-18 17:48 ` James Morse [this message]
2022-03-18 17:48 ` [stable:PATCH v4.19.235 08/22] arm64: entry: Allow tramp_alias to access symbols after the 4K boundary James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 09/22] arm64: entry: Don't assume tramp_vectors is the start of the vectors James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 10/22] arm64: entry: Move trampoline macros out of ifdef'd section James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 11/22] arm64: entry: Make the kpti trampoline's kpti sequence optional James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 12/22] arm64: entry: Allow the trampoline text to occupy multiple pages James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 13/22] arm64: entry: Add non-kpti __bp_harden_el1_vectors for mitigations James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 14/22] arm64: entry: Add vectors that have the bhb mitigation sequences James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 15/22] arm64: entry: Add macro for reading symbol addresses from the trampoline James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 16/22] arm64: Add percpu vectors for EL1 James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 17/22] arm64: proton-pack: Report Spectre-BHB vulnerabilities as part of Spectre-v2 James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 18/22] KVM: arm64: Add templates for BHB mitigation sequences James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 19/22] arm64: Mitigate spectre style branch history side channels James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 20/22] KVM: arm64: Allow SMCCC_ARCH_WORKAROUND_3 to be discovered and migrated James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 21/22] arm64: add ID_AA64ISAR2_EL1 sys register James Morse
2022-03-18 17:48 ` [stable:PATCH v4.19.235 22/22] arm64: Use the clearbhb instruction in mitigations James Morse
2022-03-19 12:52 ` [stable:PATCH v4.19.235 00/22] arm64: Mitigate spectre style branch history side channels Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220318174842.2321061-8-james.morse@arm.com \
    --to=james.morse@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®