All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jinjie Ruan" <ruanjinjie@huawei.com>
Cc: "Oliver Upton" <oupton@kernel.org>,
	kvmarm@lists.linux.dev, "Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH 12/17] arm64/nmi: Manage masking for superpriority interrupts along with DAIF
Date: Fri, 03 Jul 2026 10:27:25 +0000	[thread overview]
Message-ID: <20260703102725.7A47D1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260703100135.2512312-13-ruanjinjie@huawei.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] Kprobes IRQ flag save/restore drops ALLINT state, inadvertently unmasking NMIs upon return.
- [High] `exception_exit_restore_mask` fails to restore the `allint` field, leaving NMIs unmasked during critical exception exit.
- [Medium] Returning `struct exception_mask` by value copies uninitialized memory when `system_uses_nmi()` is false.
--

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

arm64/nmi: Manage masking for superpriority interrupts along with DAIF

This patch updates DAIF management routines to also mask and unmask 
superpriority interrupts (NMIs) when asynchronous exceptions are handled. 
It modifies both inline C functions and assembly macros to track and 
restore the ALLINT state.

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

> diff --git a/arch/arm64/include/asm/exception_masks.h b/arch/arm64/include/asm/exception_masks.h
> index fbbba769ca031..3dd41998f705c 100644
> --- a/arch/arm64/include/asm/exception_masks.h
> +++ b/arch/arm64/include/asm/exception_masks.h
[ ... ]
> @@ -87,7 +94,8 @@ static inline void local_exception_save_mask(struct exception_mask *mask)
>  	if (system_uses_irq_prio_masking())
>  		mask->pmr = gic_read_pmr();
>  
> -	mask->allint = 0;
> +	if (system_uses_nmi())
> +		mask->allint = read_sysreg_s(SYS_ALLINT);
>  }

[Severity: Medium]
Does this leave mask->allint uninitialized on systems where system_uses_nmi()
is false?

When local_exception_save_and_mask() allocates mask on the stack and returns 
it by value, returning the struct with an uninitialized field could copy 
uninitialized memory and trigger KMSAN warnings.

[ ... ]
> @@ -118,6 +126,9 @@ static inline void local_exception_restore(const struct exception_mask mask)
>  		pmr_sync();
>  	}
>  
> +	if (system_uses_nmi())
> +		write_sysreg_s(mask.allint, SYS_ALLINT);
> +
>  	write_sysreg(mask.daif, daif);

[Severity: High]
Does exception_exit_restore_mask() also need to be updated to restore the 
allint field?

Unlike local_exception_restore(), it appears exception_exit_restore_mask() was
not updated to restore SYS_ALLINT, which might leave NMIs unmasked during 
exception exit paths when returning to user or kernel mode.

[ ... ]
> diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c
> index 70d311e415ac9..8045245ebbdde 100644
> --- a/arch/arm64/kernel/probes/kprobes.c
> +++ b/arch/arm64/kernel/probes/kprobes.c
> @@ -197,12 +197,19 @@ static void __kprobes kprobes_save_local_irqflag(struct kprobe_ctlblk *kcb,
>  {
>  	kcb->saved_irqflag = regs->pstate & DAIF_MASK;
>  	regs->pstate |= DAIF_MASK;
> +
> +	if (system_uses_nmi())
> +		regs->pstate |= ALLINT_ALLINT;
>  }
>  
>  static void __kprobes kprobes_restore_local_irqflag(struct kprobe_ctlblk *kcb,
>  						struct pt_regs *regs)
>  {
>  	regs->pstate &= ~DAIF_MASK;
> +
> +	if (system_uses_nmi())
> +		regs->pstate &= ~ALLINT_ALLINT;
> +
>  	regs->pstate |= kcb->saved_irqflag;

[Severity: High]
Does this sequence inadvertently drop the ALLINT state and permanently unmask 
NMIs upon returning from the kprobe? 

In kprobes_save_local_irqflag(), DAIF_MASK does not include ALLINT_ALLINT, so 
the original NMI mask state is not saved in kcb->saved_irqflag. When 
kprobes_restore_local_irqflag() later clears ALLINT_ALLINT and restores 
saved_irqflag, any previously masked NMIs could become unexpectedly unmasked.

>  }

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

  reply	other threads:[~2026-07-03 10:27 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
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 [this message]
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=20260703102725.7A47D1F000E9@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.