In the Linux kernel, the following vulnerability has been resolved:
block: ublk: extending queue_size to fix overflow
When validating drafted SPDK ublk target, in a case that assigning large queue depth to multiqueue ublk device, ublk target would run into a weird incorrect state. During rounds of review and debug, An overflow bug was found in ublk driver.
In ublkcmd.h, UBLKMAXQUEUEDEPTH is 4096 which means each ublk queue depth can be set as large as 4096. But when setting qd for a ublk device, sizeof(struct ublkqueue) + depth * sizeof(struct ublkio) will be larger than 65535 if qd is larger than 2728. Then queuesize is overflowed, and ublkgetqueue() references a wrong pointer position. The wrong content of ublkqueue elements will lead to out-of-bounds memory access.
Extend queuesize in ublkdevice as "unsigned int".