CVE-2026-80826: USB: c67x00: fix use-after-free in c67x00_add_iso_urb()
In the Linux kernel, the following vulnerability has been resolved:
USB: c67x00: fix use-after-free in c67x00addisourb()
When TD creation fails for the last packet of an isochronous URB, c67x00addisourb() gives the URB back before updating the endpoint scheduling state.
c67x00givebackurb() frees the URB private data, and the completion callback may release the final URB reference. The following accesses to urbp->epdata, urb->interval, and urbp->cnt can therefore use freed memory.
Update nextframe and cnt before giving back the failed final packet, making the giveback the last operation that uses the URB and its private data.
Affected Software
Event History
Frequently Asked Questions
When can this use-after-free occur?
It can occur when transfer-descriptor creation fails for the last packet of an isochronous URB in c67x00_add_iso_urb(). The vulnerable ordering gives back the URB before endpoint scheduling state is updated.
What memory may be accessed after the URB is released?
Subsequent accesses to urbp->ep_data, urb->interval, and urbp->cnt may reference freed memory. The completion callback can release the final URB reference after giveback, making the URB and its private data unavailable.
What does the fix change?
The fix updates next_frame and cnt before giving back the failed final packet. This makes URB giveback the final operation that uses the URB and its private data.