UBUNTU-CVE-2026-89738: High severity ubuntu/linux vulnerability
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: at91udc: drain polled-VBUS timer/work before udc is freed In polled-VBUS mode (board.vbuspin && board.vbuspolled), probe arms a self-restarting cycle: at91vbustimer() schedules vbustimerwork, and at91vbustimerwork() calls at91vbusupdate() and re-arms the timer via modtimer(). Both recover the same udc through containerof and dereference it on every iteration. Neither teardown path cancels this cycle. udc is devm-allocated, so it is freed after at91udcremove() returns, and is likewise freed when probe fails and devres runs. A timer callback or work item that is pending or running at either point dereferences the freed udc. Add at91udcshutdownvbustimer() and call it from at91udcremove() and from the usbaddgadgetudc() failure path in probe; the remaining probe error paths fail before the timer is armed. timershutdownsync() waits for a running callback and clears timer->function, which makes the work handler's modtimer() a permanent no-op; cancelworksync() then drains any pending or running work whose re-arm attempt now does nothing. The timer must be shut down first, since cancelling the work alone would let the timer re-queue it. The guard mirrors probe: in IRQ mode the timer and workstruct are never initialized. This does not require a fault; a normal driver unbind can interleave with an already queued work item. This issue was found by an in-house static analysis tool.
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 - Compensating control
Implement at91_udc_shutdown_vbus_timer() and call it from at91udc_remove() and the usb_add_gadget_udc() failure path in probe; when board.vbus_pin && board.vbus_polled, call timer_shutdown_sync() before cancel_work_sync() so the timer cannot re-queue vbus_timer_work and all pending or running work is drained before udc is freed.