diff options
author | Milan Broz <gmazyland@gmail.com> | 2018-11-07 22:24:55 +0100 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2018-12-18 15:02:26 +0100 |
commit | ef87bfc24f9b8da82c89aff493df20f078bc9cb1 (patch) | |
tree | 9f0f98dbf82d895699bcf1036b326df2ac6d464f /drivers/md/dm-flakey.c | |
parent | dm crypt: use u64 instead of sector_t to store iv_offset (diff) | |
download | linux-ef87bfc24f9b8da82c89aff493df20f078bc9cb1.tar.xz linux-ef87bfc24f9b8da82c89aff493df20f078bc9cb1.zip |
dm: Check for device sector overflow if CONFIG_LBDAF is not set
Reference to a device in device-mapper table contains offset in sectors.
If the sector_t is 32bit integer (CONFIG_LBDAF is not set), then
several device-mapper targets can overflow this offset and validity
check is then performed on a wrong offset and a wrong table is activated.
See for example (on 32bit without CONFIG_LBDAF) this overflow:
# dmsetup create test --table "0 2048 linear /dev/sdg 4294967297"
# dmsetup table test
0 2048 linear 8:96 1
This patch adds explicit check for overflow if the offset is sector_t type.
Signed-off-by: Milan Broz <gmazyland@gmail.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-flakey.c')
-rw-r--r-- | drivers/md/dm-flakey.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c index 3cb97fa4c11d..8261aa8c7fe1 100644 --- a/drivers/md/dm-flakey.c +++ b/drivers/md/dm-flakey.c @@ -213,7 +213,7 @@ static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv) devname = dm_shift_arg(&as); r = -EINVAL; - if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1) { + if (sscanf(dm_shift_arg(&as), "%llu%c", &tmpll, &dummy) != 1 || tmpll != (sector_t)tmpll) { ti->error = "Invalid device sector"; goto bad; } |