fs/hfsplus/xattr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
When the volume header contains erroneous values that do not reflect
the actual state of the filesystem, hfsplus_fill_super() assumes that
the attributes file is not yet created, which later results in hitting
BUG_ON() when hfsplus_create_attributes_file() is called. Replace this
BUG_ON() with -EIO error with a message to suggest running fsck tool.
Reported-by: syzbot <syzbot+1107451c16b9eb9d29e6@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=1107451c16b9eb9d29e6
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
fs/hfsplus/xattr.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c
index 9a1a93e3888b..18dc3d254d21 100644
--- a/fs/hfsplus/xattr.c
+++ b/fs/hfsplus/xattr.c
@@ -172,7 +172,11 @@ static int hfsplus_create_attributes_file(struct super_block *sb)
return PTR_ERR(attr_file);
}
- BUG_ON(i_size_read(attr_file) != 0);
+ if (i_size_read(attr_file) != 0) {
+ err = -EIO;
+ pr_err("detected inconsistent attributes file, running fsck.hfsplus is recommended.\n");
+ goto end_attr_file_creation;
+ }
hip = HFSPLUS_I(attr_file);
--
2.50.1
On Tue, 2025-07-15 at 14:17 +0900, Tetsuo Handa wrote: > When the volume header contains erroneous values that do not reflect > the actual state of the filesystem, hfsplus_fill_super() assumes that > the attributes file is not yet created, which later results in hitting > BUG_ON() when hfsplus_create_attributes_file() is called. Replace this > BUG_ON() with -EIO error with a message to suggest running fsck tool. > > Reported-by: syzbot <syzbot+1107451c16b9eb9d29e6@syzkaller.appspotmail.com> > Closes: https://syzkaller.appspot.com/bug?extid=1107451c16b9eb9d29e6 > Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> > --- > fs/hfsplus/xattr.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c > index 9a1a93e3888b..18dc3d254d21 100644 > --- a/fs/hfsplus/xattr.c > +++ b/fs/hfsplus/xattr.c > @@ -172,7 +172,11 @@ static int hfsplus_create_attributes_file(struct super_block *sb) > return PTR_ERR(attr_file); > } > > - BUG_ON(i_size_read(attr_file) != 0); > + if (i_size_read(attr_file) != 0) { > + err = -EIO; > + pr_err("detected inconsistent attributes file, running fsck.hfsplus is recommended.\n"); > + goto end_attr_file_creation; > + } > > hip = HFSPLUS_I(attr_file); > Looks good! Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com> Thanks, Slava.
© 2016 - 2025 Red Hat, Inc.