Description
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: composite: fix integer underflow in WebUSB GET_URL handling The WebUSB GET_URL handler in composite_setup() narrows landing_page_length to fit the host-supplied wLength using landing_page_length = w_length - WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH + landing_page_offset; If wLength is smaller than WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH the unsigned subtraction wraps, and the subsequent memcpy(url_descriptor->URL, cdev->landing_page + landing_page_offset, landing_page_length - landing_page_offset); ends up copying close to UINT_MAX bytes from cdev->landing_page into cdev->req->buf. KASAN reports a slab-out-of-bounds in composite_setup on the kmalloc-2k gadget_info allocation, and FORTIFY_SOURCE traps the memcpy as a 4294967293-byte field-spanning write into url_descriptor->URL (size 252). A USB host can reach this from a single SETUP packet against any gadget that has webusb/use=1 and a landingPage configured. Handle the small-wLength case before the math: when the host requested fewer bytes than the URL descriptor header, only the header is meaningful and no URL bytes need to be copied. Setting landing_page_length to landing_page_offset makes the existing memcpy a no-op and leaves the descriptor returned to the host unchanged for all larger wLength values.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
93c473948c588978cd55d9a3adad8b3e8057aa21 to < 046870ff6b6f7b743c953c061043a9b30700d491affected93c473948c588978cd55d9a3adad8b3e8057aa21 to < f5869dfaa89854dcf34121036294d42d6c7acb8faffected93c473948c588978cd55d9a3adad8b3e8057aa21 to < f8f5a8f48c7cae3fac85e04b593bd47939f9725faffected93c473948c588978cd55d9a3adad8b3e8057aa21 to < a20f0ccf45708af6e063c7234c215d364b00de25affected93c473948c588978cd55d9a3adad8b3e8057aa21 to < 6c5dbc104dadd79fc2923497c20bae759a18758caffected
Linux Linux
Default version status: affected
6.3affected0 to < 6.3unaffected6.6.143 to ≤ 6.6.*unaffected6.12.93 to ≤ 6.12.*unaffected6.18.35 to ≤ 6.18.*unaffected7.0.12 to ≤ 7.0.*unaffected7.1 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/046870ff6b6f7b743c953c061043a9b30700d491 ↗
- https://git.kernel.org/stable/c/f5869dfaa89854dcf34121036294d42d6c7acb8f ↗
- https://git.kernel.org/stable/c/f8f5a8f48c7cae3fac85e04b593bd47939f9725f ↗
- https://git.kernel.org/stable/c/a20f0ccf45708af6e063c7234c215d364b00de25 ↗
- https://git.kernel.org/stable/c/6c5dbc104dadd79fc2923497c20bae759a18758c ↗