From: sashiko-bot@kernel.org
To: "Jan Sebastian Götte" <linux@jaseg.de>
Cc: robh@kernel.org, devicetree@vger.kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH 3/4] mm/secretmem: zeroize secret pages before kdump
Date: Fri, 31 Jul 2026 16:40:24 +0000 [thread overview]
Message-ID: <20260731164025.06BA81F00ACA@smtp.kernel.org> (raw)
In-Reply-To: <20260731162739.158320-4-linux@jaseg.de>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Deadlock risk during kdump due to taking a spinlock in a panic notifier.
- [Low] Missing unlock of the `s_inode_list_lock` after successfully acquiring it.
--
--- Patch [3]: [PATCH 3/4] mm/secretmem: zeroize secret pages before kdump ---
commit e5fefbd7f9b60fca2237ceaf3f2f3cb2aa75df03
Author: Jan Sebastian Götte <linux@jaseg.de>
mm/secretmem: zeroize secret pages before kdump
Register a CRASH_ZEROIZE notifier that wipes secretmem folios. As a
result, when CONFIG_CRASH_ZEROIZE is set, secretmem areas will be
cleared before the kdump kernel is kexec'ed.
> diff --git a/mm/secretmem.c b/mm/secretmem.c
> index 5f57ac4720d32..07f3905f47cbd 100644
> --- a/mm/secretmem.c
> +++ b/mm/secretmem.c
[ ... ]
> @@ -187,6 +189,50 @@ static const struct inode_operations secretmem_iops = {
>
> static struct vfsmount *secretmem_mnt;
>
> +#ifdef CONFIG_CRASH_ZEROIZE
> +/* Called far into vpanic from crash_core.c with other CPUs stopped and
> + * preemption disabled
> + */
> +static int secretmem_crash_zeroize(struct notifier_block *nb, unsigned long
> + action, void *data)
> +{
> + struct super_block *sb;
> + struct inode *inode;
> +
> + if (!secretmem_mnt)
> + return NOTIFY_DONE;
> + sb = secretmem_mnt->mnt_sb;
> +
> + /* If the list was modified in the exact moment we panic'ed, it might be
> + * in an inconsistent state that would be unsafe to iterate. If we can't
> + * get the lock, too bad, that's all we can do here.
> + */
> + if (!spin_trylock(&sb->s_inode_list_lock)) {
> + pr_crit("crash_zeroize: can't acquire secretmem superblock lock.\n"
> + "crash_zeroize: skipping zeroizing secretmem.\n");
> + return NOTIFY_DONE;
> + }
> +
> + list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
> + XA_STATE(xas, &inode->i_mapping->i_pages, 0);
> + struct folio *folio;
> +
> + /* no need for locks if we're burning down the house :) */
> + xas_for_each(&xas, folio, ULONG_MAX) {
> + if (xas_retry(&xas, folio) || xa_is_value(folio))
> + continue;
> + inode->i_mapping->a_ops->free_folio(folio);
[Severity: Critical]
Can this free_folio callback deadlock the panicking CPU?
The free_folio operation maps to secretmem_free_folio(), which invokes
set_direct_map_default_noflush(). On x86, this eventually calls
__change_page_attr_set_clr(), which unconditionally acquires cpa_lock
(when debug_pagealloc is not enabled):
arch/x86/mm/pat/set_memory.c:__change_page_attr_set_clr() {
...
if (!debug_pagealloc_enabled())
spin_lock(&cpa_lock);
...
}
Because this crash notifier runs after other CPUs have been forcibly halted
(e.g., via NMIs), if any of the stopped CPUs were interrupted while holding
cpa_lock (such as during module load or vmalloc), won't the panicking CPU
spin forever here and prevent the crash dump kernel from booting?
> + }
> + }
> + /* off to kexec()! */
> + return NOTIFY_DONE;
[Severity: Low]
Should we unlock sb->s_inode_list_lock before returning?
While this is the panic path and the system is about to kexec into the crash
kernel, leaving a successfully acquired spin_trylock unbalanced can trigger
warnings in static analysis tools or confuse readers.
> +}
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260731162739.158320-1-linux@jaseg.de?part=3
next prev parent reply other threads:[~2026-07-31 16:40 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 16:27 [PATCH 0/4] CRASH_ZEROIZE: Wipe secrets before kdump Jan Sebastian Götte
2026-07-31 16:27 ` [PATCH 1/4] of/kexec: fix typo in comment (usable-memory-range) Jan Sebastian Götte
2026-07-31 16:27 ` [PATCH 2/4] kexec: add CRASH_ZEROIZE to wipe secrets before kdump Jan Sebastian Götte
2026-07-31 16:35 ` sashiko-bot
2026-07-31 16:27 ` [PATCH 3/4] mm/secretmem: zeroize secret pages " Jan Sebastian Götte
2026-07-31 16:40 ` sashiko-bot [this message]
2026-07-31 16:27 ` [PATCH 4/4] security/keys: zeroize key payloads " Jan Sebastian Götte
2026-07-31 16:45 ` sashiko-bot
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=20260731164025.06BA81F00ACA@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux@jaseg.de \
--cc=robh@kernel.org \
--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.