From: Su Yue <l@damenly.su>
To: Wang Yugui <wangyugui@e16-tech.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 2/2] btrfs: tree-checker: check item_size for dev_item
Date: Sat, 05 Feb 2022 19:15:18 +0800 [thread overview]
Message-ID: <ee4h36eo.fsf@damenly.su> (raw)
In-Reply-To: <20220205123520.77B3.409509F4@e16-tech.com>
On Sat 05 Feb 2022 at 12:35, Wang Yugui <wangyugui@e16-tech.com>
wrote:
> 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.
>
Yes, btrfs-progs v4.9 and v3.10 based kernel.
I created a btrfs and it looks fine.
Could please provide output of
btrfs inspect-internal dump-tree $device -t 3
?
You can trim it if the content is too long only leaf 1081344 is
needed.
--
Su
> 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 11:22 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
2022-02-05 11:15 ` Su Yue [this message]
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=ee4h36eo.fsf@damenly.su \
--to=l@damenly.su \
--cc=linux-btrfs@vger.kernel.org \
--cc=wangyugui@e16-tech.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 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.