Fragments and dedup share one feature bit, and thus packed inode may not exist when fragment feature bit (dedup feature bit exactly) is set, e.g. when deduplication feature is in use while fragments feature is not. In this case, sbi->packed_inode could be NULL while fragments feature bit is set.
Fix this by accessing packed inode only when it exists. Reported-by: [email protected] Link: https://syzkaller.appspot.com/bug?extid=902d5a9373ae8f748a94 Fixes: 9e382914617c ("erofs: add helpers to load long xattr name prefixes") Signed-off-by: Jingbo Xu <[email protected]> --- fs/erofs/xattr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/erofs/xattr.c b/fs/erofs/xattr.c index cd80499351e0..bbfe7ce170d2 100644 --- a/fs/erofs/xattr.c +++ b/fs/erofs/xattr.c @@ -675,7 +675,7 @@ int erofs_xattr_prefixes_init(struct super_block *sb) if (!pfs) return -ENOMEM; - if (erofs_sb_has_fragments(sbi)) + if (sbi->packed_inode) buf.inode = sbi->packed_inode; else erofs_init_metabuf(&buf, sb); -- 2.19.1.6.gb485710b
