]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
blkdiscard: fail on sector misalignment
authorFederico Simoncelli <fsimonce@redhat.com>
Fri, 24 Oct 2014 15:13:54 +0000 (15:13 +0000)
committerKarel Zak <kzak@redhat.com>
Mon, 27 Oct 2014 08:16:47 +0000 (09:16 +0100)
sys-utils/blkdiscard.c
tests/expected/blkdiscard/offsets

index 1eb2b2857f9c125c9d30003da8c2612fd0907efa..1504ee3b4e7f5319705cfde52f3bd42ca7ca5ec0 100644 (file)
@@ -144,9 +144,10 @@ int main(int argc, char **argv)
        if (ioctl(fd, BLKSSZGET, &secsize))
                err(EXIT_FAILURE, _("%s: BLKSSZGET ioctl failed"), path);
 
-       /* align range to the sector size */
-       range[0] = (range[0] + secsize - 1) & ~(secsize - 1);
-       range[1] &= ~(secsize - 1);
+       /* check offset alignment to the sector size */
+       if (range[0] % secsize)
+               errx(EXIT_FAILURE, _("%s: offset %" PRIu64 " is not aligned "
+                        "to sector size %i"), path, range[0], secsize);
 
        /* is the range end behind the end of the device ?*/
        if (range[0] > blksize)
@@ -155,6 +156,11 @@ int main(int argc, char **argv)
        if (end < range[0] || end > blksize)
                range[1] = blksize - range[0];
 
+       /* check length alignment to the sector size */
+       if (range[1] % secsize)
+               errx(EXIT_FAILURE, _("%s: length %" PRIu64 " is not aligned "
+                        "to sector size %i"), path, range[1], secsize);
+
        if (secure) {
                if (ioctl(fd, BLKSECDISCARD, &range))
                        err(EXIT_FAILURE, _("%s: BLKSECDISCARD ioctl failed"), path);
index 766c39d718c00bf26283ce5cf854e7779e44b85d..88078785d75011215a0166558601ea5cdfbc6c6d 100644 (file)
@@ -1,16 +1,16 @@
 create loop device from image
 testing offsets with full block size
 Discarded 10485760 bytes from the offset 0
-Discarded 10485248 bytes from the offset 512
-Discarded 10485248 bytes from the offset 512
+blkdiscard: offset 1 is not aligned to sector size 512
+blkdiscard: offset 511 is not aligned to sector size 512
 Discarded 10485248 bytes from the offset 512
 Discarded 10484736 bytes from the offset 1024
 testing offsets with specific length
 Discarded 5242880 bytes from the offset 0
-Discarded 5242880 bytes from the offset 0
-Discarded 5242880 bytes from the offset 0
-Discarded 5242880 bytes from the offset 512
-Discarded 5242880 bytes from the offset 512
+blkdiscard: length 5242881 is not aligned to sector size 512
+blkdiscard: length 5243391 is not aligned to sector size 512
+blkdiscard: offset 1 is not aligned to sector size 512
+blkdiscard: offset 511 is not aligned to sector size 512
 Discarded 5242880 bytes from the offset 512
 Discarded 5242880 bytes from the offset 1024
 detach loop device from image