Messages in this thread Patch in this message | | | From | Jan Kara <> | Subject | [PATCH] block: Don't allow illegal discard requests | Date | Wed, 4 Nov 2015 10:18:41 +0100 |
| |
Currently blkdev_issue_discard() doesn't check that submitted discard request matches granularity required by the underlying device. Submitting such requests to the device can have unexpected consequences (e.g. brd driver just discards more / less data depending on how exactly the request is aligned). So test that submitted discard request has the granularity required by the driver.
Signed-off-by: Jan Kara <jack@suse.com> --- block/blk-lib.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/block/blk-lib.c b/block/blk-lib.c index bd40292e5009..7170d02e9e9a 100644 --- a/block/blk-lib.c +++ b/block/blk-lib.c @@ -61,6 +61,13 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, if (!blk_queue_discard(q)) return -EOPNOTSUPP; + if (q->limits.discard_granularity) { + unsigned int gran_sect = q->limits.discard_granularity >> 9; + + if (sector % gran_sect || nr_sects % gran_sect) + return -EINVAL; + } + if (flags & BLKDEV_DISCARD_SECURE) { if (!blk_queue_secdiscard(q)) return -EOPNOTSUPP; -- 2.1.4
| |