From: Binglei Wang <l3b2w1@gmail.com>
To: xiang@kernel.org
Cc: chao@kernel.org, linux-erofs@lists.ozlabs.org,
linux-kernel@vger.kernel.org, l3b2w1@gmail.com,
"Bo Liu (OpenAnolis)" <liubo03@inspur.com>
Subject: [PATCH v2] erofs: fix folio reuse from a different address_space in erofs_bread()
Date: Thu, 1 Oct 2026 03:19:01 +0800 [thread overview]
Message-ID: <20260930191905.539-1-l3b2w1@gmail.com> (raw)
In-Reply-To: <ar1GgGSIZ1h0bBip@MacBookPro>
erofs_bread() reuses a cached folio on page index match without
checking folio->mapping.
xattr.c calls erofs_init_metabuf() twice on the same buffer without
erofs_put_metabuf(); the two in_metabox sources differ, so buf->mapping
can switch while buf->page still belongs to the old address_space.
The next erofs_bread() then reads the wrong mapping, dropping shared
xattrs with METABOX.
We require folio->mapping == buf->mapping in the reuse check; otherwise
drop the cached folio and re-read via the slow path.
Fixes: 414091322c63 ("erofs: implement metadata compression")
Cc: Bo Liu (OpenAnolis) <liubo03@inspur.com>
Signed-off-by: Binglei Wang <l3b2w1@gmail.com>
---
Changes since v1:
- Drop the redundant erofs_put_metabuf() call; setting folio to NULL is
enough since the slow path already releases the cached folio (Gao Xiang).
- Rewrap the commit message to 72 columns.
fs/erofs/data.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/fs/erofs/data.c b/fs/erofs/data.c
index be63b89f0862..4b9fe670fdda 100644
--- a/fs/erofs/data.c
+++ b/fs/erofs/data.c
@@ -33,8 +33,12 @@ void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap)
if (buf->page) {
folio = page_folio(buf->page);
- if (folio_file_page(folio, index) != buf->page)
+ if (folio->mapping != buf->mapping) {
+ /* the cached folio belongs to another address_space */
+ folio = NULL;
+ } else if (folio_file_page(folio, index) != buf->page) {
erofs_unmap_metabuf(buf);
+ }
}
if (!folio || !folio_contains(folio, index)) {
erofs_put_metabuf(buf);
next prev parent reply other threads:[~2026-09-30 19:19 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 11:21 [PATCH] erofs: fix folio reuse from a different address_space in erofs_bread() Binglei Wang
2026-09-30 17:27 ` Gao Xiang
2026-09-30 19:19 ` Binglei Wang [this message]
2026-09-30 20:29 ` [PATCH v2] " Gao Xiang
2026-10-01 6:01 ` Binglei Wang
2026-10-02 16:01 ` Gao Xiang
2026-10-03 10:30 ` binglei wang
2026-10-10 7:18 ` Chao Yu
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=20260930191905.539-1-l3b2w1@gmail.com \
--to=l3b2w1@gmail.com \
--cc=chao@kernel.org \
--cc=linux-erofs@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liubo03@inspur.com \
--cc=xiang@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 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.