UBUNTU-CVE-2026-80811: Medium severity ubuntu/linux-hwe-edge vulnerability
In the Linux kernel, the following vulnerability has been resolved: iouring/cmd: fix iovec leak when the async cmd is not recycled An ioasynccmd carries an iovec array in ->vec.iovec, allocated when the vec has to grow and kept across recycling through ctx->cmdcache. On two paths nothing frees it and iocleanop()'s kfree(req->asyncdata) drops the ioasynccmd without it. iorequringcleanup() clears the async data flags only when ioalloccacheput() succeeds, and the cache holds IOALLOCCACHEMAX == 128 entries, so once it is full the put fails and the vec is left behind. An NVMe passthrough workload gets there without doing anything unusual: nvmeuringcmdio() returns -EIOCBQUEUED, so the ioasynccmd stays attached for the lifetime of the command and the live object count tracks the queue depth. Above 128 the puts start failing. ->cleanup is the last chance to free an inherited vec, since iorequringcleanup() returns early for an io-wq issued command and is not called at all for one completed without ever being issued. But iocleanop() calls ->cleanup only if REQFNEEDCLEANUP is set, and for uringcmd that happens only where the vec has to grow, so a command reusing a large enough cached vec never sets it. iorwallocasync() and iomsgallocasync() flag an inherited vec for exactly this reason; iouringcmdprep() does not. Flag an inherited vec in iouringcmdprep(), and free the vec when the cache put fails, as ioreqrwcleanup() does. The leak is invisible under KASAN, where ioalloccacheveckasan() frees the vec unconditionally.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1
Event History
Frequently Asked Questions
Which Ubuntu kernel packages are listed as affected?
The affected software list includes ubuntu/linux-riscv, ubuntu/linux-realtime, ubuntu/linux-hwe-edge, ubuntu/linux-azure, ubuntu/linux-gcp, ubuntu/linux-azure-fde, ubuntu/linux-gke, and ubuntu/linux-aws-5.0.
What workload can trigger the leak?
An NVMe passthrough workload using io_uring commands can reach the affected path. The issue occurs when asynchronous commands retain an io_async_cmd with an iovec array that has grown and is not freed during cleanup.
Why does queue depth affect exposure?
The command cache holds up to 128 entries. Once the number of live asynchronous commands exceeds that limit, cache insertion can fail and leave the inherited iovec allocation behind, causing a leak.