dm integrity: reject mappings too large for device
authorOndrej Mosnáček <omosnacek@gmail.com>
Mon, 5 Jun 2017 15:52:39 +0000 (17:52 +0200)
committerMike Snitzer <snitzer@redhat.com>
Mon, 12 Jun 2017 21:05:55 +0000 (17:05 -0400)
dm-integrity would successfully create mappings with the number of
sectors greater than the provided data sector count.  Attempts to read
sectors of this mapping that were beyond the provided data sector count
would then yield run-time messages of the form "device-mapper:
integrity: Too big sector number: ...".

Fix this by emitting an error when the requested mapping size is bigger
than the provided data sector count.

Signed-off-by: Ondrej Mosnacek <omosnacek@gmail.com>
Acked-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-integrity.c

index 7910bfe50da4469c44b571363cc6696f74f5fa42..4ab10cf718c97fe0c0a086e1ba68a3199c588a08 100644 (file)
@@ -3040,6 +3040,11 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
                ti->error = "The device is too small";
                goto bad;
        }
+       if (ti->len > ic->provided_data_sectors) {
+               r = -EINVAL;
+               ti->error = "Not enough provided sectors for requested mapping size";
+               goto bad;
+       }
 
        if (!buffer_sectors)
                buffer_sectors = 1;