Re: [PATCH v2 04/21] buffer: read the folio's mapping directly in buffer_set_crypto_ctx()
From: Jan Kara
Date: Wed Aug 26 2026 - 03:57:32 EST
On Thu 06-08-26 12:58:27, Chao Shi wrote:
> folio_mapping() was doing two jobs here. One was to turn a slab folio into
> NULL, which is what made this safe for jbd2's shadow buffers; the previous
> patch removed the need for that by giving those buffers no folio at all.
>
> The other is a hazard. folio_mapping() maps a folio in the swap cache to
> its swap_address_space, so if a buffer_head were ever attached to such a
> folio this would hand fscrypt a swap mapping and dereference ->host on it.
> There is no reason to want that here: this path wants the file's mapping or
> nothing.
>
> Read ->mapping directly. Buffers with no folio are already handled above.
>
> Suggested-by: Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx>
> Acked-by: Weidong Zhu <weizhu@xxxxxxx>
> Signed-off-by: Chao Shi <coshi036@xxxxxxxxx>
Looks good. Feel free to add:
Reviewed-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> fs/buffer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/buffer.c b/fs/buffer.c
> index 04fcc34e4fa6..2851830995d8 100644
> --- a/fs/buffer.c
> +++ b/fs/buffer.c
> @@ -1108,7 +1108,7 @@ static void buffer_set_crypto_ctx(struct bio *bio, const struct buffer_head *bh,
> */
> if (!bh->b_folio)
> return;
> - mapping = folio_mapping(bh->b_folio);
> + mapping = bh->b_folio->mapping;
> if (!mapping)
> return;
> fscrypt_set_bio_crypt_ctx(bio, mapping->host,
> --
> 2.43.0
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR