Ignore xattr_prefix_{count,start} and do not validate the inode-sharing
prefix id without INCOMPAT_XATTR_PREFIXES bit set. This keeps stale
superblock bytes from enabling long xattr prefix decoding on images
that did not declare the feature.Assisted-by: Codex:GPT-5.5 Signed-off-by: Yifan Zhao <[email protected]> --- lib/super.c | 3 ++- lib/xattr.c | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/super.c b/lib/super.c index c21d5ad..899d51a 100644 --- a/lib/super.c +++ b/lib/super.c @@ -149,7 +149,8 @@ int erofs_read_superblock(struct erofs_sb_info *sbi) sbi->build_time = le32_to_cpu(dsb->build_time); memcpy(&sbi->uuid, dsb->uuid, sizeof(dsb->uuid)); - if (erofs_sb_has_ishare_xattrs(sbi)) { + if (erofs_sb_has_ishare_xattrs(sbi) && + erofs_sb_has_xattr_prefixes(sbi)) { if (dsb->ishare_xattr_prefix_id >= sbi->xattr_prefix_count) { erofs_err("invalid ishare xattr prefix id %d", dsb->ishare_xattr_prefix_id); diff --git a/lib/xattr.c b/lib/xattr.c index 1891ac3..6093572 100644 --- a/lib/xattr.c +++ b/lib/xattr.c @@ -1547,6 +1547,11 @@ int erofs_xattr_prefixes_init(struct erofs_sb_info *sbi) int ret = 0, i, len; void *buf; + if (!erofs_sb_has_xattr_prefixes(sbi)) { + sbi->xattr_prefix_count = 0; + return 0; + } + if (!sbi->xattr_prefix_count) return 0; -- 2.47.3
