Message ID | 1530592056-7940-1-git-send-email-gujx@cn.fujitsu.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2018年07月03日 12:27, Gu Jinxiang wrote: > Reported in https://bugzilla.kernel.org/show_bug.cgi?id=199839, > which has a invalid chunk, not return error opportunlly. > > Add chunk type check in btrfs_check_chunk_valid, > to make error be returned in advance. > > Signed-off-by: Gu Jinxiang <gujx@cn.fujitsu.com> > --- > fs/btrfs/volumes.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c > index e034ad9e23b4..67732c910c3d 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -6439,6 +6439,12 @@ static int btrfs_check_chunk_valid(struct btrfs_fs_info *fs_info, > btrfs_chunk_type(leaf, chunk)); > return -EIO; > } > + > + if (!(type & BTRFS_BLOCK_GROUP_TYPE_MASK)) { > + btrfs_err(fs_info, "missing chunk type flag: %llu", type); > + return -EIO; > + } This is not good enough to catch case like DATA | METADATA | SYSTEM. You patch reminds me that my block group type check is not good enough. We allow either single bit set in TYPE_MASK or DATA | METADATA for mixed block group. Thanks, Qu > + > if ((type & BTRFS_BLOCK_GROUP_RAID10 && sub_stripes != 2) || > (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 1) || > (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) || >
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index e034ad9e23b4..67732c910c3d 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -6439,6 +6439,12 @@ static int btrfs_check_chunk_valid(struct btrfs_fs_info *fs_info, btrfs_chunk_type(leaf, chunk)); return -EIO; } + + if (!(type & BTRFS_BLOCK_GROUP_TYPE_MASK)) { + btrfs_err(fs_info, "missing chunk type flag: %llu", type); + return -EIO; + } + if ((type & BTRFS_BLOCK_GROUP_RAID10 && sub_stripes != 2) || (type & BTRFS_BLOCK_GROUP_RAID1 && num_stripes < 1) || (type & BTRFS_BLOCK_GROUP_RAID5 && num_stripes < 2) ||
Reported in https://bugzilla.kernel.org/show_bug.cgi?id=199839, which has a invalid chunk, not return error opportunlly. Add chunk type check in btrfs_check_chunk_valid, to make error be returned in advance. Signed-off-by: Gu Jinxiang <gujx@cn.fujitsu.com> --- fs/btrfs/volumes.c | 6 ++++++ 1 file changed, 6 insertions(+)