From: NeilBrown Date: Sun, 6 Jan 2019 10:06:25 +0000 (+1100) Subject: dm: fix to_sector() for 32bit X-Git-Tag: v4.19.31~45 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7668d6e45f3a0f4caade465e2df969a1948fc3a4;p=thirdparty%2Fkernel%2Fstable.git dm: fix to_sector() for 32bit commit 0bdb50c531f7377a9da80d3ce2d61f389c84cb30 upstream. A dm-raid array with devices larger than 4GB won't assemble on a 32 bit host since _check_data_dev_sectors() was added in 4.16. This is because to_sector() treats its argument as an "unsigned long" which is 32bits (4GB) on a 32bit host. Using "unsigned long long" is more correct. Kernels as early as 4.2 can have other problems due to to_sector() being used on the size of a device. Fixes: 0cf4503174c1 ("dm raid: add support for the MD RAID0 personality") cc: stable@vger.kernel.org (v4.2+) Reported-and-tested-by: Guillaume Perréal Signed-off-by: NeilBrown Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman --- diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h index 6fb0808e87c81..bef2e36c01b4b 100644 --- a/include/linux/device-mapper.h +++ b/include/linux/device-mapper.h @@ -601,7 +601,7 @@ do { \ */ #define dm_target_offset(ti, sector) ((sector) - (ti)->begin) -static inline sector_t to_sector(unsigned long n) +static inline sector_t to_sector(unsigned long long n) { return (n >> SECTOR_SHIFT); }