From: Hans van Kranenburg <Hans.van.Kranenburg@mendix.com>
To: Johannes Thumshirn <jthumshirn@suse.de>, David Sterba <dsterba@suse.com>
Cc: Linux BTRFS Mailinglist <linux-btrfs@vger.kernel.org>,
Nikolay Borisov <nborisov@suse.com>, Qu Wenruo <wqu@suse.com>,
Liu Bo <obuil.liubo@gmail.com>
Subject: Re: [PATCH v2] btrfs: ensure that a DUP or RAID1 block group has exactly two stripes
Date: Mon, 18 Feb 2019 09:55:01 +0000 [thread overview]
Message-ID: <adbf2ddb-be6b-25c7-b74e-a337c97d12bd@mendix.com> (raw)
In-Reply-To: <20190218094850.13512-1-jthumshirn@suse.de>
On 2/18/19 10:48 AM, Johannes Thumshirn wrote:
> We recently had a customer issue with a corrupted filesystem. When trying
> to mount this image btrfs panicked with a division by zero in
> calc_stripe_length().
>
> The corrupt chunk had a 'num_stripes' value of 1. calc_stripe_length()
> takes this value and divides it by the number of copies the RAID profile is
> expected to have to calculate the amount of data stripes. As a DUP profile
> is expected to have 2 copies this division resulted in 1/2 = 0. Later then
> the 'data_stripes' variable is used as a divisor in the stripe length
> calculation which results in a division by 0 and thus a kernel panic.
>
> When encountering a filesystem with a DUP block group and a 'num_stripes'
> value unequal to 2, refuse mounting as the image is corrupted and will lead
> to unexpected behaviour.
>
> Code inspection showed a RAID1 block group has the same issues.
>
> Fixes: e06cd3dd7cea ("Btrfs: add validadtion checks for chunk loading")
> Cc: Liu Bo <obuil.liubo@gmail.com>
> Reviewed-by: Qu Wenruo <wqu@suse.com>
> Reviewed-by: Nikolay Borisov <nborisov@suse.com>
> Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
> ---
> Changes to v1:
> - Also add the check for RAID1 (Hans)
> ---
> fs/btrfs/volumes.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
> index 03f223aa7194..a4d12ada0565 100644
> --- a/fs/btrfs/volumes.c
> +++ b/fs/btrfs/volumes.c
> @@ -6791,10 +6791,10 @@ static int btrfs_check_chunk_valid(struct btrfs_fs_info *fs_info,
> }
>
> if ((type & BTRFS_BLOCK_GROUP_RAID10 && sub_stripes != 2) ||
> - (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 1) ||
> + (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes != 1) ||
I think you meant != 2 here. It's just like DUP, but with the two of
them on different devices instead of the same.
> (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) ||
> (type & BTRFS_BLOCK_GROUP_RAID6 && num_stripes < 3) ||
> - (type & BTRFS_BLOCK_GROUP_DUP && num_stripes > 2) ||
> + (type & BTRFS_BLOCK_GROUP_DUP && num_stripes != 2) ||
> ((type & BTRFS_BLOCK_GROUP_PROFILE_MASK) == 0 &&
> num_stripes != 1)) {
> btrfs_err(fs_info,
>
Thanks,
--
Hans van Kranenburg
next prev parent reply other threads:[~2019-02-18 9:55 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-18 9:48 [PATCH v2] btrfs: ensure that a DUP or RAID1 block group has exactly two stripes Johannes Thumshirn
2019-02-18 9:55 ` Hans van Kranenburg [this message]
2019-02-18 9:55 ` Johannes Thumshirn
2019-02-18 10:28 ` [PATCH v2.1] " Johannes Thumshirn
2019-02-19 7:33 ` Peter Becker
2019-02-19 7:40 ` Nikolay Borisov
2019-02-19 17:54 ` David Sterba
2019-02-19 18:11 ` David Sterba
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=adbf2ddb-be6b-25c7-b74e-a337c97d12bd@mendix.com \
--to=hans.van.kranenburg@mendix.com \
--cc=dsterba@suse.com \
--cc=jthumshirn@suse.de \
--cc=linux-btrfs@vger.kernel.org \
--cc=nborisov@suse.com \
--cc=obuil.liubo@gmail.com \
--cc=wqu@suse.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.