2023-05-15 10:43:08

by Jingbo Xu

[permalink] [raw]
Subject: [PATCH v2] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init

Fragments and dedupe share one feature bit, and thus packed inode may not
exist when fragment feature bit (dedupe 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]>
---
v2: polish the commit message (Gao Xiang)
---
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



2023-05-16 01:09:16

by Yue Hu

[permalink] [raw]
Subject: Re: [PATCH v2] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init

On Mon, 15 May 2023 18:39:41 +0800
Jingbo Xu <[email protected]> wrote:

> Fragments and dedupe share one feature bit, and thus packed inode may not
> exist when fragment feature bit (dedupe 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]>

Reviewed-by: Yue Hu <[email protected]>

2023-05-23 06:44:32

by Chao Yu

[permalink] [raw]
Subject: Re: [PATCH v2] erofs: fix null-ptr-deref caused by erofs_xattr_prefixes_init

On 2023/5/15 18:39, Jingbo Xu wrote:
> Fragments and dedupe share one feature bit, and thus packed inode may not
> exist when fragment feature bit (dedupe 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]>

Reviewed-by: Chao Yu <[email protected]>

Thanks,