[PATCH] erofs: avoid reading more for fragment maps

Hongbo Li lihongbo22 at huawei.com
Tue Sep 16 23:23:01 AEST 2025



On 2025/9/16 16:48, Gao Xiang wrote:
> Since all real encoded extents (directly handled by the decompression
> subsystem) have a sane, limited maximum decoded length
> (Z_EROFS_PCLUSTER_MAX_DSIZE), and the read‑more policy is only applied
> if needed.
> 
> However, it makes no sense to read more for non‑encoded maps, such as
> fragment extents, since such extents can be huge (up to i_size) and
> there is no benefit to reading more at this layer.
> 
> For normal images, it does not really matter, but for crafted images
> generated by syzbot, excessively large fragment extents can cause
> read‑more to run for an overly long time.
> 
> Reported-by: syzbot+1a9af3ef3c84c5e14dcc at syzkaller.appspotmail.com
> Closes: https://lore.kernel.org/r/68c8583d.050a0220.2ff435.03a3.GAE@google.com
> Fixes: b44686c8391b ("erofs: fix large fragment handling")
> Fixes: b15b2e307c3a ("erofs: support on-disk compressed fragments data")
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
> ---

Reviewed-by: Hongbo Li <lihongbo22 at huawei.com>

Thanks,
Hongbo

>   fs/erofs/zdata.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
> index 2d73297003d2..625b8ae8f67f 100644
> --- a/fs/erofs/zdata.c
> +++ b/fs/erofs/zdata.c
> @@ -1835,7 +1835,7 @@ static void z_erofs_pcluster_readmore(struct z_erofs_frontend *f,
>   		map->m_la = end;
>   		err = z_erofs_map_blocks_iter(inode, map,
>   					      EROFS_GET_BLOCKS_READMORE);
> -		if (err)
> +		if (err || !(map->m_flags & EROFS_MAP_ENCODED))
>   			return;
>   
>   		/* expand ra for the trailing edge if readahead */
> @@ -1847,7 +1847,7 @@ static void z_erofs_pcluster_readmore(struct z_erofs_frontend *f,
>   		end = round_up(end, PAGE_SIZE);
>   	} else {
>   		end = round_up(map->m_la, PAGE_SIZE);
> -		if (!map->m_llen)
> +		if (!(map->m_flags & EROFS_MAP_ENCODED) || !map->m_llen)
>   			return;
>   	}
>   


More information about the Linux-erofs mailing list