CVE-2026-98766 PUBLISHED

usb: gadget: aspeed-vhub: cancel wake work on device removal

Assigner: Linux
Reserved: 25.09.2026 Published: 18.10.2026 Updated: 18.10.2026

In the Linux kernel, the following vulnerability has been resolved:

usb: gadget: aspeed-vhub: cancel wake work on device removal

wake_work is armed from the gadget .wakeup callback to resume suspended downstream ports, and it is never cancelled in ast_vhub_remove(), so a work item queued before or during removal can run after devm has freed vhub and its ports, a use-after-free.

Cancelling the work alone is not sufficient: usb_gadget_wakeup() takes no lock and the unbind path never clears wakeup_en, so a remote-wakeup request in flight on another CPU can re-arm the work after the cancel and before vhub is freed.

ast_vhub_del_dev() already clears d->registered under vhub->lock before unregistering the gadget. Refuse the wakeup in ast_vhub_udc_wakeup() once d->registered is clear: the check and the schedule_work() are then atomic against the unbind, so a wakeup that passed before the flag was cleared is drained by the cancel_work_sync() after the del_dev loop, and one that arrives later returns without arming. Also move INIT_WORK() to the top of ast_vhub_probe(), since the probe error path reuses ast_vhub_remove() and would otherwise cancel a never-initialized work item.

This issue was found by an in-house static analysis tool.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 7ecca2a4080cb6b1fa174adc588fce9e9014c43c to f343bfa3fc9f6255602d66f4a7dbe7ddef13ba41 (excl.)
  • affected from 7ecca2a4080cb6b1fa174adc588fce9e9014c43c to 474e9e1852fb5ba0bfb26f123dd0cb361d0f4f4d (excl.)
  • affected from 7ecca2a4080cb6b1fa174adc588fce9e9014c43c to c81504dfd2d93e345c98e7a012c2f2e74ce5b6a1 (excl.)
  • affected from 7ecca2a4080cb6b1fa174adc588fce9e9014c43c to 20388c8d1d74c203fec8194c45cd31afdfab934e (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.18 is affected
  • unaffected from 0 to 4.18 (excl.)
  • unaffected from 6.12.113 to 6.12.* (incl.)
  • unaffected from 6.18.56 to 6.18.* (incl.)
  • unaffected from 7.2.10 to 7.2.* (incl.)
  • unaffected from 7.3-rc6 to * (incl.)

References