Hi Lucus,

On 2026/3/3 10:39, lishixian wrote:
When rebuilding from source EROFS images, erofs_read_xattrs_from_disk()
is called for inodes that have xattr. At that point inode->sbi points to
the source image's sbi, which is opened read-only and never gets
erofs_xattr_init(), so sbi->xamgr is NULL. get_xattritem(sbi) then
dereferences xamgr and crashes with SIGSEGV.

Fix by using the build target's xamgr when initializing src's sbi.

Reported-by: Yixiao Chen <[email protected]>
Fixes: https://github.com/erofs/erofs-utils/issues/42
Signed-off-by: lishixian <[email protected]>
Reviewed-by: Yifan Zhao <[email protected]>

Can you confirm it that fixes your issue too?
I will merge this for the bandaid solution, but after erofs-utils 1.9.1
is released, rebuild and xattr codebase need to be fixed instead.

Thanks,
Gao Xiang

---
  mkfs/main.c | 2 ++
  1 file changed, 2 insertions(+)

diff --git a/mkfs/main.c b/mkfs/main.c
index b84d1b4..58c18f9 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -1735,7 +1735,9 @@ static int erofs_mkfs_rebuild_load_trees(struct 
erofs_inode *root)
        }
list_for_each_entry(src, &rebuild_src_list, list) {
+               src->xamgr = g_sbi.xamgr;
                ret = erofs_rebuild_load_tree(root, src, datamode);
+               src->xamgr = NULL;
                if (ret) {
                        erofs_err("failed to load %s", src->devname);
                        return ret;


Reply via email to