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

On Wed, 15 Dec 2021 23:02:40 +0000,
D Scott Phillips <scott@os.amperecomputing.com> wrote:
> 
> 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						\

I'd have opted for the use of sysreg_clear_set() instead of the
open-coded RMW, as it would elide the write-back in most cases.

This looks otherwise OK to me. With that fixed:

Reviewed-by: Marc Zyngier <maz@kernel.org>

	M.

-- 
Without deviation from the norm, progress is not possible.

_______________________________________________
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-16  9:39 UTC|newest]

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

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=87r1acx5gl.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=darren@os.amperecomputing.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=patches@amperecomputing.com \
    --cc=scott@os.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.