[PATCH] erofs-utils: fix `-Ededupe` crash without fragments enabled

Jingbo Xu jefflexu at linux.alibaba.com
Sat May 6 13:23:25 AEST 2023



On 5/6/23 10:51 AM, Gao Xiang wrote:
> Otherwise, an unexpected segfault will happen since
>   EROFS_FEATURE_INCOMPAT_FRAGMENTS and
>   EROFS_FEATURE_INCOMPAT_DEDUPE    share the same bit.
> 
> Fixes: 18fbf7d12e4f ("erofs-utils: build xattrs upon extra long name prefixes")
> Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
> ---
>  lib/xattr.c | 1 +
>  mkfs/main.c | 2 +-
>  2 files changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/xattr.c b/lib/xattr.c
> index 5e9e413..9c87227 100644
> --- a/lib/xattr.c
> +++ b/lib/xattr.c
> @@ -646,6 +646,7 @@ int erofs_xattr_write_name_prefixes(FILE *f)
>  		if (fseek(f, offset, SEEK_SET))
>  			return -errno;
>  	}
> +	cfg.c_fragments = true;
>  	erofs_sb_set_fragments();
>  	erofs_sb_set_xattr_prefixes();
>  	return 0;
> diff --git a/mkfs/main.c b/mkfs/main.c
> index 467ea86..ddedfde 100644
> --- a/mkfs/main.c
> +++ b/mkfs/main.c
> @@ -903,7 +903,7 @@ int main(int argc, char **argv)
>  	}
>  
>  	packed_nid = 0;
> -	if (erofs_sb_has_fragments()) {
> +	if (cfg.c_fragments && erofs_sb_has_fragments()) {
>  		erofs_update_progressinfo("Handling packed_file ...");
>  		packed_inode = erofs_mkfs_build_packedfile();
>  		if (IS_ERR(packed_inode)) {

We have cfg.c_extra_ea_name_prefixes now.  How about

	if ((cfg.c_fragments || cfg.c_extra_ea_name_prefixes) &&
            erofs_sb_has_fragments())

-- 
Thanks,
Jingbo


More information about the Linux-erofs mailing list