mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "David Hildenbrand (Arm)" <david@kernel.org>
To: David Rheinsberg <david@readahead.eu>,
	Hugh Dickins <hughd@google.com>,
	Baolin Wang <baolin.wang@linux.alibaba.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>, Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <skhan@linuxfoundation.org>,
	Randy Dunlap <rdunlap@infradead.org>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org, stable@vger.kernel.org,
	Chris Mason <mason@kernel.org>
Subject: Re: [PATCH 2/2] mm/memfd: handle GUP references reliably when write-sealing
Date: Fri, 6 Nov 2026 21:44:44 +0100	[thread overview]
Message-ID: <f85dbae0-e7a1-4441-901b-e1efd0fd4a65@kernel.org> (raw)
In-Reply-To: <2c95ecf1-058e-4d81-9de5-622e32dc57df@app.fastmail.com>

On 11/6/26 20:46, David Rheinsberg wrote:
> Hi David

Hi!

> 
> On Tue, Nov 3, 2026, at 7:31 PM, David Hildenbrand (Arm) wrote:
>> We made a big mistake when introducing write-sealing: we should have
>> disallowed *any* file mappings while we are write-sealing. Write-sealing is
>> usually done by a producer that wants to hand-off some data to a consumer.
>> Having the producer have a read-only mapping (private or read-only shared)
>> of the memfd while sealing is rather odd: it couldn't have been used to
>> fill the memfd in the first place.
>>
>> Most identified public users don't do anything like that: they either never
>> map the memfd before write-sealing (using write() instead), or munmap()
>> before write-sealing:
>>
>>  - systemd's journal writes, fwupd, Flatpak, runc, crun and
>>    containers/storage write to the memfd without mmap'ing it, before
>>    sealing it [1,2,3,4,5,6]. The FD consumer will not access the memfd
>>    before sealing.
>>
>>  - dbus-broker, Mutter, Chromium's Android linker, KWin, Weston and glycin
>>    map the memfd file, but unmap it before sealing [7,8,9,10,11,12].
>>    glycin retries sealing while waiting for the loader to unmap.
>>
>>  - go-memfd exposes a shared writable mapping before F_SEAL_WRITE and a
>>    private read-only mapping afterwards. Its API explicitly requires
>>    unmapping the writable mapping before sealing [13].
> 
> When I wrote memfd-sealing, we had this use-case where an application writes a buffer and then shares it both with in-process and out-of-process tasks. Only if out-of-process tasks are actually involved, the buffer is sealed. Otherwise, it is kept unsealed and can be recycled. Hand-off to other processes was optional, rare and asynchronous, so sealing could happen at any time. Yet, we wanted to keep the buffers mapped to avoid costly TLB flushes. Mappings were readonly, but writes were done through syscalls.
> 
> We still do this, but I don't think any of the open-source users picked this up.

Ok. So internally you would have to accept the additional insecurity and enable
the kernel workaround through the parameter. How much of a problem would such a
workaround be in your fleet once you upgrade the kernel?

Not nice, but there is simply not proper way to fix this mess right now in a
better way.

> I did not follow the folio changes, so I am quite unsure whether the implementation was racy from the beginning, or whether new infrastructure introduced the races.
> 
> Can you elaborate why folio ref-counts are unreliable / unstable?

I'll have to point you at the doc of folio_expected_ref_count() where this is
properly documented.

Back when you used page_count() vs. page_mapcount() you probably had no idea
that this is completely racy as we didn't have any such helper to spell it out.

-- 
Cheers,

David

  reply	other threads:[~2026-11-06 20:44 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-03 18:31 [PATCH 0/2] " David Hildenbrand (Arm)
2026-11-03 18:31 ` [PATCH 1/2] mm/memfd: handle GUP pins more " David Hildenbrand (Arm)
2026-11-04  9:15   ` Lorenzo Stoakes (ARM)
2026-11-03 18:31 ` [PATCH 2/2] mm/memfd: handle GUP references " David Hildenbrand (Arm)
2026-11-06 19:46   ` David Rheinsberg
2026-11-06 20:44     ` David Hildenbrand (Arm) [this message]
2026-11-05 10:14 ` [PATCH 0/2] " David Hildenbrand (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=f85dbae0-e7a1-4441-901b-e1efd0fd4a65@kernel.org \
    --to=david@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=corbet@lwn.net \
    --cc=david@readahead.eu \
    --cc=hughd@google.com \
    --cc=liam@infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=ljs@kernel.org \
    --cc=mason@kernel.org \
    --cc=mhocko@suse.com \
    --cc=rdunlap@infradead.org \
    --cc=rppt@kernel.org \
    --cc=skhan@linuxfoundation.org \
    --cc=stable@vger.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

all inboxes | Powered by JetHome®