Description
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler The OTG branch of composite_setup() falls back to the first configuration when none is selected: if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value); list_first_entry() never returns NULL. On an empty list it returns container_of() of the list head. So the "if (!config)" check is dead. When cdev->configs is empty, config points at the head inside struct usb_composite_dev. config->descriptors[0] reads whatever sits at that offset. The memcpy copies up to w_length bytes of it into the response buffer. cdev->configs can be empty in two cases. One is a teardown race on gadget unbind with a control transfer in flight. The other is a driver that sets is_otg before it adds a config. A reproducer that holds cdev->configs empty triggers a KASAN fault in this branch. Use list_first_entry_or_null() so the existing check does its job.
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
53e6242db8d60da0587d36951cc9434d1a1c21dd to < 2454264b2ab4cf0055c0bfd39e79f830452bd0dbaffected53e6242db8d60da0587d36951cc9434d1a1c21dd to < d3e72cfef2e38bd588055739a8100d14f9773b17affected53e6242db8d60da0587d36951cc9434d1a1c21dd to < 8ac463fe6c0f85bdb1ce8c30e8c9e060802e4483affected53e6242db8d60da0587d36951cc9434d1a1c21dd to < 56add2b9b2e89ec61c0761165d758f73004fdfdfaffected53e6242db8d60da0587d36951cc9434d1a1c21dd to < 91b3ecd34b60f950c50c560974945b6596a6f207affected53e6242db8d60da0587d36951cc9434d1a1c21dd to < 01feaf024f29618d5ffa7ab0fd858e0579dcbf7baffected53e6242db8d60da0587d36951cc9434d1a1c21dd to < fcb21bf747640c9d6bd1eda9da85420f076d59c1affected53e6242db8d60da0587d36951cc9434d1a1c21dd to < f8f680609c2b3ab795ffcd6f21585b6dfc46d395affected
Linux Linux
Default version status: affected
4.3affected0 to < 4.3unaffected5.10.261 to ≤ 5.10.*unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.96 to ≤ 6.12.*unaffected6.18.39 to ≤ 6.18.*unaffected7.1.4 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/2454264b2ab4cf0055c0bfd39e79f830452bd0db ↗
- https://git.kernel.org/stable/c/d3e72cfef2e38bd588055739a8100d14f9773b17 ↗
- https://git.kernel.org/stable/c/8ac463fe6c0f85bdb1ce8c30e8c9e060802e4483 ↗
- https://git.kernel.org/stable/c/56add2b9b2e89ec61c0761165d758f73004fdfdf ↗
- https://git.kernel.org/stable/c/91b3ecd34b60f950c50c560974945b6596a6f207 ↗
- https://git.kernel.org/stable/c/01feaf024f29618d5ffa7ab0fd858e0579dcbf7b ↗
- https://git.kernel.org/stable/c/fcb21bf747640c9d6bd1eda9da85420f076d59c1 ↗
- https://git.kernel.org/stable/c/f8f680609c2b3ab795ffcd6f21585b6dfc46d395 ↗