From: Frank Sorenson <sorenson@redhat.com>
To: David Howells <dhowells@redhat.com>
Cc: Paulo Alcantara <pc@manguebit.org>,
Jeff Layton <jlayton@kernel.org>,
linux-fsdevel@vger.kernel.org, netfs@lists.linux.dev,
CIFS <linux-cifs@vger.kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: netfs_read_gaps(): aliased sink folio makes the read destination unreadable, SIGBUS on cifs with signing
Date: Wed, 9 Sep 2026 11:11:56 -0500 [thread overview]
Message-ID: <afd68097-b2b2-47e5-889b-fb077e7a9247@redhat.com> (raw)
In-Reply-To: <1714046.1788952509@warthog.procyon.org.uk>
On 9/9/26 6:15 AM, David Howells wrote:
> Hi Frank,
>
> Can you try this? It can be triggered manually with something like:
>
> xfs_io -c "w 100 100" -c "r 0 4096" /xfstest.test/foo
Hi David,
With the patch, generic/759 now runs to successful completion on cifs mounted
with 'sign'.
Two things, though:
1) IIUC, folio_alloc() returns an unlocked folio holding a single reference, so:
if (sink_to >= 0)
for (; sink_from <= sink_to; sink_from++)
folio_unlock(bvec_folio(&bvec[sink_from]));
unlocks something that was never locked, and never drops the reference.
So should these be folio_put() instead?
With CONFIG_DEBUG_VM=y, I think that's a
VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio) on the first gap
read with a non-empty dirty region. My test VM has it off, which is
why I got a clean pass; but with bpftrace, I see 190 leaked order-0
sink folios (760 KiB) over one generic/759 run.
2) if netfs_alloc_request() fails, the kfree(bvec) at alloc_error is reachable
before bvec is assigned, so I think we need to initialize it to NULL at
declaration. (It uses mempool->alloc() directly for the read origins rather than
mempool_alloc(), so it can genuinely return -ENOMEM.):
struct bio_vec *bvec = NULL;
With s/folio_unlock/folio_put/ and initializing bvec to NULL:
Tested-by: Frank Sorenson <sorenson@redhat.com>
(but I'll retest without those additions if I'm mistaken... it's happened before)
(as an aside, 'git log -S' on the bvec_set_folio(..., sink, ...) line puts
the aliasing earlier than the read rewrite -- should the Fixes: be
7f84a7b9892d ("netfs: Make netfs_read_folio() handle streaming-write
pages") instead?
Frank
--
Frank Sorenson
sorenson@redhat.com
Principal Software Maintenance Engineer, filesystems
Red Hat
next prev parent reply other threads:[~2026-09-09 16:12 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-08 23:24 netfs_read_gaps(): aliased sink folio makes the read destination unreadable, SIGBUS on cifs with signing Frank Sorenson
2026-09-09 11:15 ` David Howells
2026-09-09 16:11 ` Frank Sorenson [this message]
2026-09-09 16:34 ` David Howells
2026-09-09 17:13 ` David Howells
2026-09-09 17:14 ` David Howells
2026-09-09 17:15 ` David Howells
2026-09-09 21:08 ` Frank Sorenson
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=afd68097-b2b2-47e5-889b-fb077e7a9247@redhat.com \
--to=sorenson@redhat.com \
--cc=dhowells@redhat.com \
--cc=jlayton@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netfs@lists.linux.dev \
--cc=pc@manguebit.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