Skip to content

Commit

Permalink
ublk_drv: add module parameter of ublks_max for limiting max allowed …
Browse files Browse the repository at this point in the history
…ublk dev

Prepare for supporting unprivileged ublk device by limiting max number
ublk devices added. Otherwise too many ublk devices could be added by
un-trusted user, which can be thought as one DoS.

Reviewed-by: ZiyangZhang <[email protected]>
Signed-off-by: Ming Lei <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
Ming Lei authored and axboe committed Jan 29, 2023
1 parent abb864d commit 403ebc8
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions drivers/block/ublk_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,15 @@ static wait_queue_head_t ublk_idr_wq; /* wait until one idr is freed */

static DEFINE_MUTEX(ublk_ctl_mutex);

/*
* Max ublk devices allowed to add
*
* It can be extended to one per-user limit in future or even controlled
* by cgroup.
*/
static unsigned int ublks_max = 64;
static unsigned int ublks_added; /* protected by ublk_ctl_mutex */

static struct miscdevice ublk_misc;

static void ublk_dev_param_basic_apply(struct ublk_device *ub)
Expand Down Expand Up @@ -1441,6 +1450,8 @@ static int ublk_add_chdev(struct ublk_device *ub)
ret = cdev_device_add(&ub->cdev, dev);
if (ret)
goto fail;

ublks_added++;
return 0;
fail:
put_device(dev);
Expand Down Expand Up @@ -1483,6 +1494,7 @@ static void ublk_remove(struct ublk_device *ub)
cancel_work_sync(&ub->quiesce_work);
cdev_device_del(&ub->cdev, &ub->cdev_dev);
put_device(&ub->cdev_dev);
ublks_added--;
}

static struct ublk_device *ublk_get_device_from_id(int idx)
Expand Down Expand Up @@ -1642,6 +1654,10 @@ static int ublk_ctrl_add_dev(struct io_uring_cmd *cmd)
if (ret)
return ret;

ret = -EACCES;
if (ublks_added >= ublks_max)
goto out_unlock;

ret = -ENOMEM;
ub = kzalloc(sizeof(*ub), GFP_KERNEL);
if (!ub)
Expand Down Expand Up @@ -2095,5 +2111,8 @@ static void __exit ublk_exit(void)
module_init(ublk_init);
module_exit(ublk_exit);

module_param(ublks_max, int, 0444);
MODULE_PARM_DESC(ublks_max, "max number of ublk devices allowed to add(default: 64)");

MODULE_AUTHOR("Ming Lei <[email protected]>");
MODULE_LICENSE("GPL");

0 comments on commit 403ebc8

Please sign in to comment.