On Fri,  2 Dec 2022 11:33:27 +0800
Gao Xiang <[email protected]> wrote:

> Inline pcluster should be freed right after it is decompressed.
> Otherwise inline pclusters will be leaked.
> 
> Reported-by: [email protected]
> Fixes: cecf864d3d76 ("erofs: support inline data decompression")
> Cc: Yue Hu <[email protected]>
> Signed-off-by: Gao Xiang <[email protected]>

Reviewed-by: Yue Hu <[email protected]>

Thanks.

> ---
>  fs/erofs/zdata.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
> index ab22100be861..e14e6c32e70d 100644
> --- a/fs/erofs/zdata.c
> +++ b/fs/erofs/zdata.c
> @@ -496,7 +496,8 @@ static int z_erofs_register_pcluster(struct 
> z_erofs_decompress_frontend *fe)
>       struct erofs_workgroup *grp;
>       int err;
>  
> -     if (!(map->m_flags & EROFS_MAP_ENCODED)) {
> +     if (!(map->m_flags & EROFS_MAP_ENCODED) ||
> +         !(map->m_pa >> PAGE_SHIFT)) {
>               DBG_BUGON(1);
>               return -EFSCORRUPTED;
>       }
> @@ -1114,6 +1115,8 @@ static int z_erofs_decompress_pcluster(struct 
> z_erofs_decompress_backend *be,
>       /* pcluster lock MUST be taken before the following line */
>       WRITE_ONCE(pcl->next, Z_EROFS_PCLUSTER_NIL);
>       mutex_unlock(&pcl->lock);
> +     if (z_erofs_is_inline_pcluster(pcl))
> +             z_erofs_free_pcluster(pcl);
>       return err;
>  }
>

Reply via email to