diff mbox series

block: ublk: make sure that block size is set correctly

Message ID 20230406124059.2035969-1-ming.lei@redhat.com (mailing list archive)
State New, archived
Headers show
Series block: ublk: make sure that block size is set correctly | expand

Commit Message

Ming Lei April 6, 2023, 12:40 p.m. UTC
block size is one very key setting for block layer, and bad block size
could panic kernel easily.

Make sure that block size is set correctly.

Meantime if ublk_validate_params() fails, clear ub->params so that disk
is prevented from being added.

Fixes: 71f28f3136af ("ublk_drv: add io_uring based userspace block driver")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 drivers/block/ublk_drv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jens Axboe April 6, 2023, 1:32 p.m. UTC | #1
On 4/6/23 6:40 AM, Ming Lei wrote:
> block size is one very key setting for block layer, and bad block size
> could panic kernel easily.
> 
> Make sure that block size is set correctly.
> 
> Meantime if ublk_validate_params() fails, clear ub->params so that disk
> is prevented from being added.

Applied, and I added Breno's reported-by to the tags.
diff mbox series

Patch

diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
index f48d213fb65e..2899efa07fad 100644
--- a/drivers/block/ublk_drv.c
+++ b/drivers/block/ublk_drv.c
@@ -246,7 +246,7 @@  static int ublk_validate_params(const struct ublk_device *ub)
 	if (ub->params.types & UBLK_PARAM_TYPE_BASIC) {
 		const struct ublk_param_basic *p = &ub->params.basic;
 
-		if (p->logical_bs_shift > PAGE_SHIFT)
+		if (p->logical_bs_shift > PAGE_SHIFT || p->logical_bs_shift < 9)
 			return -EINVAL;
 
 		if (p->logical_bs_shift > p->physical_bs_shift)
@@ -1949,6 +1949,8 @@  static int ublk_ctrl_set_params(struct ublk_device *ub,
 		/* clear all we don't support yet */
 		ub->params.types &= UBLK_PARAM_TYPE_ALL;
 		ret = ublk_validate_params(ub);
+		if (ret)
+			ub->params.types = 0;
 	}
 	mutex_unlock(&ub->mutex);