All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gao Xiang <xiang@kernel.org>
To: Binglei Wang <l3b2w1@gmail.com>
Cc: xiang@kernel.org, chao@kernel.org, linux-kernel@vger.kernel.org,
	zbestahu@gmail.com, jefflexu@linux.alibaba.com,
	dhavale@google.com, hongbohbli@tencent.com, guochunhai@vivo.com,
	liubo03@inspur.com, linux-erofs@lists.ozlabs.org
Subject: Re: [PATCH] erofs: fix folio reuse from a different address_space in erofs_bread()
Date: Wed, 30 Sep 2026 19:27:28 +0200	[thread overview]
Message-ID: <ar1GgGSIZ1h0bBip@MacBookPro> (raw)
In-Reply-To: <20260930112127.27059-1-l3b2w1@gmail.com>

On Wed, Sep 30, 2026 at 07:21:27PM +0800, Binglei Wang wrote:
> From: Binglei Wang <l3b2w1@gmail.com>
> 
> erofs_bread() reuses a cached folio on page index match without checking folio->mapping.

Each line in the commit message should not exceed 72 chars.

> 
> 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>
> ---
>  fs/erofs/data.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/erofs/data.c b/fs/erofs/data.c
> index be63b89f0862..d8b6523bc218 100644
> --- a/fs/erofs/data.c
> +++ b/fs/erofs/data.c
> @@ -33,8 +33,13 @@ 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 */
> +			erofs_put_metabuf(buf);
> +			folio = NULL;

As I said, you could just drop `erofs_put_metabuf(buf);` here,
and folio = NULL will do the correct thing instead.

Thanks,
Gao Xiang

> +		} else if (folio_file_page(folio, index) != buf->page) {
>  			erofs_unmap_metabuf(buf);
> +		}
>  	}
>  	if (!folio || !folio_contains(folio, index)) {
>  		erofs_put_metabuf(buf);
> --
> 2.43.0
> 
> 


  reply	other threads:[~2026-09-30 17:27 UTC|newest]

Thread overview: 11+ 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 [this message]
2026-09-30 19:19   ` [PATCH v2] " Binglei Wang
2026-09-30 20:29     ` 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
  -- strict thread matches above, loose matches on Subject: below --
2026-09-30  3:37 [PATCH] " binglei wang
2026-09-30  7:52 ` Gao Xiang
2026-09-30 11:29   ` binglei wang

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=ar1GgGSIZ1h0bBip@MacBookPro \
    --to=xiang@kernel.org \
    --cc=chao@kernel.org \
    --cc=dhavale@google.com \
    --cc=guochunhai@vivo.com \
    --cc=hongbohbli@tencent.com \
    --cc=jefflexu@linux.alibaba.com \
    --cc=l3b2w1@gmail.com \
    --cc=linux-erofs@lists.ozlabs.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=liubo03@inspur.com \
    --cc=zbestahu@gmail.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.