md/bitmap: Fix bitmap chunk size overflow issues
authorFlorian-Ewald Mueller <florian-ewald.mueller@ionos.com>
Tue, 25 Oct 2022 07:37:05 +0000 (09:37 +0200)
committerSong Liu <song@kernel.org>
Mon, 14 Nov 2022 17:35:50 +0000 (09:35 -0800)
commit4555211190798b6b6fa2c37667d175bf67945c78
treed4e1b118a6db6715648a9d95ad459d1e9e7952bc
parentf97a5528b21eb175d90dce2df9960c8d08e1be82
md/bitmap: Fix bitmap chunk size overflow issues

- limit bitmap chunk size internal u64 variable to values not overflowing
  the u32 bitmap superblock structure variable stored on persistent media
- assign bitmap chunk size internal u64 variable from unsigned values to
  avoid possible sign extension artifacts when assigning from a s32 value

The bug has been there since at least kernel 4.0.
Steps to reproduce it:
1: mdadm -C /dev/mdx -l 1 --bitmap=internal --bitmap-chunk=256M -e 1.2
-n2 /dev/rnbd1 /dev/rnbd2
2 resize member device rnbd1 and rnbd2 to 8 TB
3 mdadm --grow /dev/mdx --size=max

The bitmap_chunksize will overflow without patch.

Cc: stable@vger.kernel.org
Signed-off-by: Florian-Ewald Mueller <florian-ewald.mueller@ionos.com>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Song Liu <song@kernel.org>
drivers/md/md-bitmap.c