From: Wang Yugui <wangyugui@e16-tech.com>
To: Su Yue <l@damenly.su>, linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 2/2] btrfs: tree-checker: check item_size for dev_item
Date: Sat, 05 Feb 2022 12:35:20 +0800 [thread overview]
Message-ID: <20220205123520.77B3.409509F4@e16-tech.com> (raw)
In-Reply-To: <20220205111348.9D4B.409509F4@e16-tech.com>
Hi,
> A btrfs filesystem failed to boot with this patch.
>
> corrupt leaf: root=3 block=1081344 slot=0 devid=1 invalid item size: has 0 expect 98
>
> Any way to fix it online?
This btrfs filesystem is created by centos 7.9 installer (btrfs 4.9?)
about 1 years ago. and then mainly writen by kernel 5.4/5.10/5.15.
Best Regards
Wang Yugui (wangyugui@e16-tech.com)
2022/02/05
>
> > Check item size before accessing the device item to avoid out of bound
> > access.
> >
> > Signed-off-by: Su Yue <l@damenly.su>
> > ---
> > fs/btrfs/tree-checker.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c
> > index 2978fc89c093..87fff4345977 100644
> > --- a/fs/btrfs/tree-checker.c
> > +++ b/fs/btrfs/tree-checker.c
> > @@ -965,6 +965,7 @@ static int check_dev_item(struct extent_buffer *leaf,
> > struct btrfs_key *key, int slot)
> > {
> > struct btrfs_dev_item *ditem;
> > + u32 item_size = btrfs_item_size(leaf, slot);
> >
> > if (unlikely(key->objectid != BTRFS_DEV_ITEMS_OBJECTID)) {
> > dev_item_err(leaf, slot,
> > @@ -972,6 +973,13 @@ static int check_dev_item(struct extent_buffer *leaf,
> > key->objectid, BTRFS_DEV_ITEMS_OBJECTID);
> > return -EUCLEAN;
> > }
> > +
> > + if (unlikely(item_size != sizeof(*ditem))) {
> > + dev_item_err(leaf, slot, "invalid item size: has=%u expect=%zu",
> > + item_size, sizeof(*ditem));
> > + return -EUCLEAN;
> > + }
> > +
> > ditem = btrfs_item_ptr(leaf, slot, struct btrfs_dev_item);
> > if (unlikely(btrfs_device_id(leaf, ditem) != key->offset)) {
> > dev_item_err(leaf, slot,
> > --
> > 2.34.1
>
next prev parent reply other threads:[~2022-02-05 4:35 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-21 9:33 [PATCH 0/2] Simple two patches for tree checker Su Yue
2022-01-21 9:33 ` [PATCH 1/2] btrfs: tree-checker: check item_size for inode_item Su Yue
2022-01-21 9:33 ` [PATCH 2/2] btrfs: tree-checker: check item_size for dev_item Su Yue
2022-02-05 3:13 ` Wang Yugui
2022-02-05 4:35 ` Wang Yugui [this message]
2022-02-05 11:15 ` Su Yue
2022-02-05 12:30 ` Wang Yugui
2022-02-05 13:01 ` Qu Wenruo
2022-02-05 14:49 ` Wang Yugui
2022-02-06 12:12 ` Su Yue
2022-02-06 15:39 ` Wang Yugui
2022-01-24 15:44 ` [PATCH 0/2] Simple two patches for tree checker David Sterba
2022-02-18 15:13 ` Su Yue
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=20220205123520.77B3.409509F4@e16-tech.com \
--to=wangyugui@e16-tech.com \
--cc=l@damenly.su \
--cc=linux-btrfs@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.