summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorMikulas Patocka <mpatocka@redhat.com>2020-01-15 08:35:25 -0500
committerJens Axboe <axboe@kernel.dk>2020-01-15 21:43:09 -0700
commitad6bf88a6c19a39fb3b0045d78ea880325dfcf15 (patch)
treef205d6e5e7679bad32bc676242018db08444d1ac /block
parent16c731fed6d8e5615e23d2fd59cfe62eb10d9ff4 (diff)
downloadlinux-ad6bf88a6c19a39fb3b0045d78ea880325dfcf15.tar.gz
linux-ad6bf88a6c19a39fb3b0045d78ea880325dfcf15.tar.bz2
linux-ad6bf88a6c19a39fb3b0045d78ea880325dfcf15.zip
block: fix an integer overflow in logical block size
Logical block size has type unsigned short. That means that it can be at most 32768. However, there are architectures that can run with 64k pages (for example arm64) and on these architectures, it may be possible to create block devices with 64k block size. For exmaple (run this on an architecture with 64k pages): Mount will fail with this error because it tries to read the superblock using 2-sector access: device-mapper: writecache: I/O is not aligned, sector 2, size 1024, block size 65536 EXT4-fs (dm-0): unable to read superblock This patch changes the logical block size from unsigned short to unsigned int to avoid the overflow. Cc: stable@vger.kernel.org Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r--block/blk-settings.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/blk-settings.c b/block/blk-settings.c
index 5f6dcc7a47bd..c8eda2e7b91e 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -328,7 +328,7 @@ EXPORT_SYMBOL(blk_queue_max_segment_size);
* storage device can address. The default of 512 covers most
* hardware.
**/
-void blk_queue_logical_block_size(struct request_queue *q, unsigned short size)
+void blk_queue_logical_block_size(struct request_queue *q, unsigned int size)
{
q->limits.logical_block_size = size;