All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jinjie Ruan" <ruanjinjie@huawei.com>
Cc: kvmarm@lists.linux.dev, "Oliver Upton" <oupton@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH 09/17] arm64/idreg: Add an override for FEAT_NMI
Date: Fri, 03 Jul 2026 10:20:08 +0000	[thread overview]
Message-ID: <20260703102009.716041F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260703100135.2512312-10-ruanjinjie@huawei.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Missing `isb()` after writing to the `SYS_HCRX_EL2` control system register in the `finalise_el2_state` macro.
- [Medium] The EL2 setup logic for FEAT_NMI unconditionally fails because `__check_override` operates on a garbage value instead of the actual `id_aa64pfr1_el1` register.
--

commit e25e512407767afb5fe8ee7e72e600b4c00a8c3a
Author: Mark Brown <broonie@kernel.org>

arm64/hyp-stub: Enable access to ALLINT

This commit updates HCRX_EL2 to ensure that TALLINT is not set when support
for NMIs is detected. This prevents traps from being enabled for NMIs,
allowing them to be used properly.

Link: https://lore.kernel.org/r/20221112151708.175147-7-broonie@kernel.org

> diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
> index aa8ec9df80243..73b8997f8d432 100644
> --- a/arch/arm64/include/asm/el2_setup.h
> +++ b/arch/arm64/include/asm/el2_setup.h
> @@ -600,6 +600,19 @@
>  
>  	msr_s	SYS_SMPRIMAP_EL2, xzr		// Make all priorities equal
>  .Lskip_sme_\@:
> +
> +	// NMIs
> +	__check_override id_aa64pfr1, ID_AA64PFR1_EL1_NMI_SHIFT, 4, .Linit_nmi_\@, .Lskip_nmi_\@, x1, x2

[Severity: Medium]
Could this inadvertently bypass the NMI setup by using __check_override
instead of check_override?

Because __check_override expects the hardware register value to already be
loaded into x1, and it isn't loaded here, x1 contains leftover data from the
preceding SME checks.

As a result, the bitfield extraction will always evaluate to 0,
unconditionally skipping the .Linit_nmi_\@ block and nullifying this
initialization.

> +
> +.Linit_nmi_\@:
> +	mrs	x1, id_aa64mmfr1_el1		// HCRX_EL2 present?
> +	ubfx	x1, x1, #ID_AA64MMFR1_EL1_HCX_SHIFT, #4
> +	cbz	x1, .Lskip_nmi_\@
> +
> +	mrs_s	x1, SYS_HCRX_EL2
> +	and	x1, x1, # ~HCRX_EL2_TALLINT_MASK	// Don't trap ALLINT
> +	msr_s	SYS_HCRX_EL2, x1

[Severity: High]
Is an isb instruction required immediately after writing to the SYS_HCRX_EL2
control register here?

Because the finalise_el2_state macro immediately terminates, the CPU will
execute subsequent instructions without a context synchronization event.
For instance, in arch/arm64/kvm/hyp/nvhe/hyp-init.S:

__kvm_init_el2_state:
    init_el2_state
    finalise_el2_state
    ret

The ret instruction will execute against undefined pipeline state before the
new configuration is synchronized.

> +.Lskip_nmi_\@:
>  .endm
>  
>  #endif /* __ARM_KVM_INIT_H__ */

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260703100135.2512312-1-ruanjinjie@huawei.com?part=9

  reply	other threads:[~2026-07-03 10:20 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-03 10:01 [PATCH 00/17] arm64: Support FEAT_NMI and Rework Exception Masking Jinjie Ruan
2026-07-03 10:01 ` [PATCH 01/17] arm64: Move DAIF macros to ptrace.h and use them centrally Jinjie Ruan
2026-07-03 16:44   ` Breno Leitao
2026-07-06 12:57     ` Jinjie Ruan
2026-07-03 10:01 ` [PATCH 02/17] arm64: Rework exception masking into abstract logical mask Jinjie Ruan
2026-07-03 10:15   ` sashiko-bot
2026-07-03 13:38   ` Leonardo Bras
2026-07-06 13:00     ` Jinjie Ruan
2026-07-06 13:02       ` Leonardo Bras
2026-07-03 13:48   ` Leonardo Bras
2026-07-06 13:15     ` Jinjie Ruan
2026-07-06 13:43       ` Leonardo Bras
2026-07-07  8:39         ` Jinjie Ruan
2026-07-03 10:01 ` [PATCH 03/17] arm64: entry: arm64: entry: Move DAIF masking for EL1 exit to C code Jinjie Ruan
2026-07-03 10:01 ` [PATCH 04/17] arm64: entry: Add entry-specific helpers Jinjie Ruan
2026-07-03 10:17   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 05/17] arm64: Introduce helpers for restoring standard exception masks Jinjie Ruan
2026-07-03 10:01 ` [PATCH 06/17] arm64/booting: Document boot requirements for FEAT_NMI Jinjie Ruan
2026-07-03 10:15   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 07/17] arm64/sysreg: Add definitions for immediate versions of MSR ALLINT Jinjie Ruan
2026-07-03 10:18   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 08/17] arm64/hyp-stub: Enable access to ALLINT Jinjie Ruan
2026-07-03 10:16   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 09/17] arm64/idreg: Add an override for FEAT_NMI Jinjie Ruan
2026-07-03 10:20   ` sashiko-bot [this message]
2026-07-03 10:01 ` [PATCH 10/17] arm64/cpufeature: Detect PE support " Jinjie Ruan
2026-07-03 10:01 ` [PATCH 11/17] KVM: arm64: Hide FEAT_NMI from guests Jinjie Ruan
2026-07-03 10:13   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 12/17] arm64/nmi: Manage masking for superpriority interrupts along with DAIF Jinjie Ruan
2026-07-03 10:27   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 13/17] arm64/entry: Don't call preempt_schedule_irq() with NMIs masked Jinjie Ruan
2026-07-03 10:01 ` [PATCH 14/17] arm64/irq: Document handling of FEAT_NMI in irqflags.h Jinjie Ruan
2026-07-03 10:01 ` [PATCH 15/17] arm64/nmi: Add handling of superpriority interrupts as NMIs Jinjie Ruan
2026-07-03 10:19   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 16/17] arm64/nmi: Add Kconfig for NMI Jinjie Ruan
2026-07-03 10:28   ` sashiko-bot
2026-07-03 10:01 ` [PATCH 17/17] irqchip/gic-v3: Implement FEAT_GICv3_NMI support Jinjie Ruan
2026-07-03 10:25   ` sashiko-bot
2026-07-03 14:15 ` [PATCH 00/17] arm64: Support FEAT_NMI and Rework Exception Masking Mark Rutland
2026-07-06  1:10   ` Jinjie Ruan

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=20260703102009.716041F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=ruanjinjie@huawei.com \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.