From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Christoph Hellwig <hch@lst.de>,
syzbot <syzbot+ae97a827ae1c3336bbb4@syzkaller.appspotmail.com>,
clm@fb.com, dsterba@suse.com, johannes.thumshirn@wdc.com,
josef@toxicpanda.com, linux-btrfs@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
syzkaller-bugs@googlegroups.com
Subject: Re: [syzbot] [btrfs?] kernel BUG in prepare_to_merge
Date: Wed, 2 Aug 2023 14:53:14 +0800 [thread overview]
Message-ID: <3ae87897-9fb8-20c5-66ea-3289e255fe5e@gmx.com> (raw)
In-Reply-To: <ZMkkEEQVr1T/p/vJ@infradead.org>
On 2023/8/1 23:26, Christoph Hellwig wrote:
> In the meantime I've also reproduced it with just
> "btrfs: fix the btrfs_get_global_root return value", but it took
> a rather long time.
>
> After wading through the code my suspicion is that before this fix
> the ERR_PTR return made that for those cases btrfs_get_root_ref and
> btrfs_get_fs_root_commit_root don't actually do the
> btrfs_lookup_fs_root. Although that seemed unintentional as far
> as I can tell it might have prevented some additional problems
> with whatever syzcaller is fuzzing here. Not sure if anyone who
> knows this code has any good idea where to start looking?
>
I'm also looking into the case, the weird part seems to be we're getting
some race between qgroup tree creation and relocation.
More rounds of syzbot testing shows it's not on-disk data corruption,
but runtime corruption lead to the invalid reloc tree key.
Normally if we're relocating tree 8 (quota tree), we should get
fs_info->quota_root, and it should not has ROOT_SHAREABLE flag, thus we
just go COW the involved quota tree block.
But by somehow, if the quota tree is created by btrfs_init_fs_root() it
would has the ROOT_SHAREABLE flag and leads to the incorrect reloc tree
creation.
My current guess is, some race like this:
Thread A | Thread B
---------------------------------+------------------------------
btrfs_quota_enable() |
| | btrfs_get_root_ref()
| | |- btrfs_get_global_root()
| | | Returned NULL
| | |- btrfs_lookup_fs_root()
| | | Returned NULL
|- btrfs_create_tree() | |
| Now quota root item is | |
| inserted | |- btrfs_read_tree_root()
| | | Got the newly inserted quota root
| | |- btrfs_init_fs_root()
| | | Set ROOT_SHAREABLE flag
By this, with a relocation and quota enabling, we create a race that we
can get a quota root with ROOT_SHAREABLE set, and lead to the problem.
Personally speaking, I don't have a particularly good idea on how to fix it.
We may skip any non-subvolume related trees in btrfs_init_fs_root(), but
that doesn't seem correct to me.
Any good ideas on this?
Thanks,
Qu
next prev parent reply other threads:[~2023-08-02 6:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-01 20:46 syzbot
2023-07-03 5:10 ` syzbot
2023-07-30 17:07 ` syzbot
2023-07-31 5:11 ` Qu Wenruo
2023-07-31 5:26 ` Qu Wenruo
2023-08-01 14:37 ` Aleksandr Nogikh
2023-08-01 14:58 ` syzbot
2023-08-02 5:19 ` Qu Wenruo
2023-08-02 5:35 ` syzbot
2023-07-31 2:13 ` syzbot
2023-07-31 7:37 ` Christoph Hellwig
2023-07-31 8:12 ` Qu Wenruo
2023-07-31 9:46 ` Christoph Hellwig
2023-07-31 10:01 ` Qu Wenruo
2023-08-01 11:39 ` Christoph Hellwig
2023-08-01 15:26 ` Christoph Hellwig
2023-08-02 6:53 ` Qu Wenruo [this message]
2023-08-01 22:19 ` Qu Wenruo
2023-08-02 9:12 ` Qu Wenruo
2023-08-02 9:32 ` syzbot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ae87897-9fb8-20c5-66ea-3289e255fe5e@gmx.com \
--to=quwenruo.btrfs@gmx.com \
--cc=clm@fb.com \
--cc=dsterba@suse.com \
--cc=hch@infradead.org \
--cc=hch@lst.de \
--cc=johannes.thumshirn@wdc.com \
--cc=josef@toxicpanda.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=syzbot+ae97a827ae1c3336bbb4@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®