[PATCH] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init

Jingbo Xu posted 1 patch 2 years, 8 months ago
There is a newer version of this series
fs/erofs/xattr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init
Posted by Jingbo Xu 2 years, 8 months ago
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: syzbot+902d5a9373ae8f748a94@syzkaller.appspotmail.com
Link: https://syzkaller.appspot.com/bug?extid=902d5a9373ae8f748a94
Fixes: 9e382914617c ("erofs: add helpers to load long xattr name prefixes")
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
---
 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
Re: [PATCH] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init
Posted by Gao Xiang 2 years, 8 months ago

On 2023/5/15 02:21, Jingbo Xu wrote:
> Fragments and dedup share one feature bit, and thus packed inode may not
please use the formal name "dedupe".

> exist when fragment feature bit (dedup feature bit exactly) is set, e.g.
                                    ^ dedupe

> 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: syzbot+902d5a9373ae8f748a94@syzkaller.appspotmail.com
> Link: https://syzkaller.appspot.com/bug?extid=902d5a9373ae8f748a94
> Fixes: 9e382914617c ("erofs: add helpers to load long xattr name prefixes")
> Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
> ---
>   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);