All of lore.kernel.org
 help / color / mirror / Atom feed
From: D Scott Phillips <scott@os.amperecomputing.com>
To: linux-arm-kernel@lists.infradead.org
Cc: Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
	Darren Hart <darren@os.amperecomputing.com>,
	patches@amperecomputing.com
Subject: [PATCH] arm64: errata: Fix exec handling in erratum 1418040 workaround
Date: Wed, 15 Dec 2021 15:02:40 -0800	[thread overview]
Message-ID: <20211215230240.604489-1-scott@os.amperecomputing.com> (raw)

The erratum 1418040 workaround changes vct access trapping when switching
between compat and non-compat threads. The workaround logic assumes that
the hardware vct trapping state matches the previous task's compat-ness.
However, when a non-compat task execs a compat binary or vice versa, the
cntkctl state and task compat-ness get out of sync. Keep the hardware
trapping state in sync with the task personality.

Fixes: d49f7d7376d0 ("arm64: Move handling of erratum 1418040 into C code")
Signed-off-by: D Scott Phillips <scott@os.amperecomputing.com>
Cc: <stable@vger.kernel.org> # 5.4.x
---
 arch/arm64/include/asm/elf.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index 97932fbf973d..463ff8f00aa7 100644
--- a/arch/arm64/include/asm/elf.h
+++ b/arch/arm64/include/asm/elf.h
@@ -160,8 +160,18 @@ typedef struct user_fpsimd_state elf_fpregset_t;
 
 #define SET_PERSONALITY(ex)						\
 ({									\
+	if (IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040))			\
+		preempt_disable();					\
 	clear_thread_flag(TIF_32BIT);					\
 	current->personality &= ~READ_IMPLIES_EXEC;			\
+	if (this_cpu_has_cap(ARM64_WORKAROUND_1418040)) {		\
+		u64 val;						\
+		val = read_sysreg(cntkctl_el1);				\
+		val |= ARCH_TIMER_USR_VCT_ACCESS_EN;			\
+		write_sysreg(val, cntkctl_el1);				\
+	}								\
+	if (IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040))			\
+		preempt_enable();					\
 })
 
 /* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
@@ -223,7 +233,17 @@ int compat_elf_check_arch(const struct elf32_hdr *);
  */
 #define COMPAT_SET_PERSONALITY(ex)					\
 ({									\
+	if (IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040))			\
+		preempt_disable();					\
 	set_thread_flag(TIF_32BIT);					\
+	if (this_cpu_has_cap(ARM64_WORKAROUND_1418040)) {		\
+		u64 val;						\
+		val = read_sysreg(cntkctl_el1);				\
+		val &= ~ARCH_TIMER_USR_VCT_ACCESS_EN;			\
+		write_sysreg(val, cntkctl_el1);				\
+	}								\
+	if (IS_ENABLED(CONFIG_ARM64_ERRATUM_1418040))			\
+		preempt_enable();					\
  })
 #ifdef CONFIG_COMPAT_VDSO
 #define COMPAT_ARCH_DLINFO						\
-- 
2.31.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

             reply	other threads:[~2021-12-15 23:04 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-15 23:02 D Scott Phillips [this message]
2021-12-16  9:30 ` [PATCH] arm64: errata: Fix exec handling in erratum 1418040 workaround Marc Zyngier

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=20211215230240.604489-1-scott@os.amperecomputing.com \
    --to=scott@os.amperecomputing.com \
    --cc=darren@os.amperecomputing.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=patches@amperecomputing.com \
    --cc=will@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.