From: "David Hildenbrand (Arm)" <david@kernel.org>
To: Brendan Jackman <jackmanb@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
Vlastimil Babka <vbabka@kernel.org>,
Mike Rapoport <rppt@kernel.org>,
Suren Baghdasaryan <surenb@google.com>,
Michal Hocko <mhocko@suse.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
brendan.jackman@linux.dev
Subject: Re: [PATCH v2] mm/secretmem: don't allow highmem folios
Date: Fri, 17 Jul 2026 13:03:41 +0100 [thread overview]
Message-ID: <af641878-3dff-4ff3-a28d-b41dd3c38001@kernel.org> (raw)
In-Reply-To: <20260717-secretmem-highmem-v2-1-1f1a961ca91e@google.com>
On 7/17/26 11:48, Brendan Jackman wrote:
> secretmem_fault() allocates a folio with GFP_HIGHUSER and then calls
> set_direct_map_invalid_noflush() without checking folio_test_highmem().
> This causes a warning and process crash (vibe-coded reproducer in Link
> below):
>
> Su[ 30.071284] ------------[ cut here ]------------
> ccessfully allocated and mapped 2097152000 bytes at 0x3a449000
> Populating memor[ 30.074614] CPA: called for zero pte. vaddr = 0 cpa->vaddr = 0
> y...
> [ 30.078636] WARNING: arch/x86/mm/pat/set_memory.c:1840 at __cpa_process_fault+0x34d/0x360, CPU#5: allocate_secret/570
> [ 30.084789] CPU: 5 UID: 0 PID: 570 Comm: allocate_secret Not tainted 7.1.0-14063-g4edcdefd4083-dirty #10 PREEMPTLAZY
> [ 30.090937] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
> [ 30.097543] EIP: __cpa_process_fault+0x34d/0x360
> [ 30.100514] Code: ff ff 85 c0 0f 89 7d fe ff ff e9 3d fe ff ff 8b 03 8b 00 c7 04 24 c8 ff 64 c1 89 44 24 08 8b 45 e8 89 44 24 04 e8 53 7
> a 00 00 <0f> 0b c7 45 f0 f2 ff ff ff e9 fc fc ff ff 90 8d 74 26 00 55 25 00
> [ 30.110829] EAX: 00000000 EBX: f64afe98 ECX: 00000000 EDX: 00000000
> [ 30.114799] ESI: 00000000 EDI: f64afe98 EBP: f64afe04 ESP: f64afdcc
> [ 30.118785] DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 EFLAGS: 00010246
> [ 30.123020] CR0: 80050033 CR2: 46c48ffc CR3: 038c8000 CR4: 00000690
> [ 30.127010] Call Trace:
> [ 30.129078] __change_page_attr_set_clr+0x5e7/0x870
> [ 30.132275] ? console_unlock+0x99/0x130
> [ 30.135069] ? irq_work_queue+0x36/0x70
> [ 30.137853] ? page_address+0xd3/0xf0
> [ 30.140421] set_direct_map_invalid_noflush+0x52/0x60
> [ 30.143782] secretmem_fault+0x128/0x210
> [ 30.146560] __do_fault+0x25/0x90
> [ 30.149053] handle_mm_fault+0x6d1/0xcb0
> [ 30.151759] exc_page_fault+0x135/0x3b0
> [ 30.154487] ? doublefault_shim+0x150/0x150
> [ 30.157416] handle_exception+0x130/0x130
> [ 30.160137] EIP: 0x804d29f
> [ 30.162307] Code: 89 54 08 e1 89 54 08 e5 89 54 08 e9 89 54 08 ed c3 0f b6 44 24 08 89 7c 24 0c 69 c0 01 01 01 01 8b 7c 24 04 f7 c7 0f 0
> 0 00 00 <89> 44 0f fc 75 0e c1 e9 02 f3 ab 8b 44 24 04 8b 7c 24 0c c3 31 d2
> [ 30.172936] EAX: 5a5a5a5a EBX: 00000000 ECX: 0c800000 EDX: 3a449000
> [ 30.176927] ESI: 00000000 EDI: 3a449000 EBP: bfbbae18 ESP: bfbbadac
> [ 30.180897] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b EFLAGS: 00010246
> [ 30.185161] ? doublefault_shim+0x150/0x150
> [ 30.187979] ---[ end trace 0000000000000000 ]---
> Bus error (core dumped) ./allocate_secret_i686 2000M
>
> The equivalent bug was pointed out by a local Sashiko instance on
> https://lore.kernel.org/all/20260410151746.61150-3-kalyazin@amazon.com/
>
> This hasn't been reproduced it on older kernel versions but from code
> inspection the bug seems to go back to the original introduction in
> commit 1507f51255c9f ("mm: introduce memfd_secret system call to create
> "secret" memory areas"). If this configuration has always been broken,
> there's no need to worry too much about feature regression here.
>
> Nonetheless, instead of just completely disabling secretmem under
> !HIGHMEM, just drop __GFP_HIGHMEM. This means that now where you
> previously got a crash, instead you'll just see the secretmem process
> OOM.
>
> Could secretmem just support highmem by saying "this isn't in the direct
> map anyway" and bailing out before the set_direct_map_invalid_noflush()?
> Maybe. That depends on requirements that are not well-defined (e.g. is
> it OK that kmap_local_page() is not a NOP for those pages?), and would
> require some research and deep thinking. Let's "defer" that until
> an actual usecase arises.
>
> Link: https://github.com/bjackman/limmat-kernel-nix/commit/7b2acba2d3a5ef01400d493a155beb1d135b6bb5
> Suggested-by: Andrew Morton <akpm@linux-foundation.org>
> Link: https://lore.kernel.org/all/20260704192603.40aa80cf9242b77aa75e8d8d@linux-foundation.org/
> Fixes: 1507f51255c9f ("mm: introduce memfd_secret system call to create "secret" memory areas")
> Signed-off-by: Brendan Jackman <jackmanb@google.com>
> ---
> Based on mm-new with `[PATCH] mm/secretmem: disable under HIGHMEM` [1]
> reverted.
>
> Note this was found by Sashiko but in a local instance, so I can't
> provide a link to the report and I guess it's technically inaccurate to
> mention sashiko-bot@kernel.org.
We sometimes just used Reported-by: Sashiko ...without a link report.
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
--
Cheers,
David
next prev parent reply other threads:[~2026-07-17 12:03 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-17 9:48 Brendan Jackman
2026-07-17 12:03 ` David Hildenbrand (Arm) [this message]
2026-07-17 12:44 ` Lorenzo Stoakes (ARM)
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=af641878-3dff-4ff3-a28d-b41dd3c38001@kernel.org \
--to=david@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=brendan.jackman@linux.dev \
--cc=jackmanb@google.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mhocko@suse.com \
--cc=rppt@kernel.org \
--cc=surenb@google.com \
--cc=vbabka@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox