From: Oscar Salvador <osalvador@suse.de>
To: Hugh Dickins <hughd@google.com>
Cc: Muchun Song <muchun.song@linux.dev>,
David Hildenbrand <david@redhat.com>,
Deepanshu Kartikey <kartikey406@gmail.com>,
Vivek Kasireddy <vivek.kasireddy@intel.com>,
baolin.wang@linux.alibaba.com, akpm@linux-foundation.org,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
syzbot+f64019ba229e3a5c411b@syzkaller.appspotmail.com
Subject: Re: [PATCH] mm/memfd: clear hugetlb pages on allocation
Date: Wed, 12 Nov 2025 10:13:34 +0100 [thread overview]
Message-ID: <aRRPvn4DYAhuGtq3@localhost.localdomain> (raw)
In-Reply-To: <2a10f8c9-dbdf-7bac-b387-e134890983df@google.com>
On Tue, Nov 11, 2025 at 10:55:03PM -0800, Hugh Dickins wrote:
> Thanks a lot, Deepanshu and syzbot: this sounds horrid, and important
> to fix very soon; and wlll need a Fixes tag (with stable Cc'ed when
> the fix goes into mm.git), I presume it's
>
> Fixes: 89c1905d9c14 ("mm/gup: introduce memfd_pin_folios() for pinning memfd folios")
>
> But although my name appears against mm/memfd.c, the truth is I know
> little of hugetlb (maintainers now addressed), and when its folios
> are supposed to get zeroed (would a __GFP_ZERO somewhere be better?).
>
> I was puzzled by how udmabuf came into the picture, since hugetlbfs
> has always supported the read (not write) system call: but see now
> that there is this surprising backdoor into the hugetlb subsystem,
> via memfd and GUP pinning.
>
> And where does that folio get marked uptodate, or is "uptodate"
> irrelevant on hugetlbfs? Are the right locks taken, or could
> there be races when adding to hugetlbfs cache in this way?
Thanks Hugh for raising this up.
memfd_alloc_folio() seems to try to recreate what hugetlb_no_page()
would do (slightly different though).
The thing is that as far as I know, we should grab hugetlb mutex before
trying to add a new page in the pagecache, per comment in
hugetlb_fault():
"
/*
* Serialize hugepage allocation and instantiation, so that we don't
* get spurious allocation failures if two CPUs race to instantiate
* the same page in the page cache.
*/
"
and at least that is what all callers of hugetlb_add_to_page_cache() do
at this moment, all except memfd_alloc_folio(), so I guess this one
needs fixing.
Regarding the uptodate question, I do not see what is special about this situation
that we would not need it.
We seem to be marking the folio uptodate every time we do allocate a folio __and__
before adding it into the pagecache (which is expected, right?).
Now, for the GFP_ZERO question.
This one is nasty.
hugetlb_reserve_pages() will allocate surplus folios without zeroing, but those
will be zeroed in the faulting path before mapping them into userspace pagetables
(see folio_zero_user() in hugetlb_no_page()).
So unless I am missing something we need to zero them in this case as well.
--
Oscar Salvador
SUSE Labs
next prev parent reply other threads:[~2025-11-12 9:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-12 3:16 [PATCH] mm/memfd: clear hugetlb pages on allocation Deepanshu Kartikey
2025-11-12 6:55 ` Hugh Dickins
2025-11-12 7:28 ` Deepanshu Kartikey
2025-11-12 7:55 ` Hugh Dickins
2025-11-12 9:13 ` Oscar Salvador [this message]
2025-11-12 9:26 ` Deepanshu Kartikey
2025-11-12 10:09 ` David Hildenbrand (Red Hat)
2025-11-12 11:56 ` Oscar Salvador
2025-11-12 12:06 ` Deepanshu Kartikey
2025-11-12 14:54 ` Deepanshu Kartikey
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=aRRPvn4DYAhuGtq3@localhost.localdomain \
--to=osalvador@suse.de \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=david@redhat.com \
--cc=hughd@google.com \
--cc=kartikey406@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=syzbot+f64019ba229e3a5c411b@syzkaller.appspotmail.com \
--cc=vivek.kasireddy@intel.com \
/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.