Description
In the Linux kernel, the following vulnerability has been resolved: usb: host: max3421: Fix shift-out-of-bounds in max3421_hub_control() The `max3421_hub_control()` function handles USB hub class requests to the virtual root hub. In the `default` branches of both the `ClearPortFeature` and `SetPortFeature` switch statements, it modifies `max3421_hcd->port_status` by left shifting 1 by the request's `value` parameter. However, it does not validate whether this shift will exceed the width of `port_status`. So if a malicious userspace task with access to the root hub via /dev/bus/usb/.../001 issues a USBDEVFS_CONTROL ioctl with `wValue` greater than or equal to 32, the left shift operation invokes shift-out-of-bounds undefined behavior. This results in arbitrary bit corruption of `port_status`, including the normally-immutable change bits, which can bypass internal state checks and confuse the hub status. Fix this by rejecting requests whose `value` exceeds the shift width before performing the shift. This issue was found using a KLEE-based symbolic execution tool for kernel drivers that I'm currently developing.
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
2d53139f31626bad6f8983d8e519ddde2cbba921 to < e5fa9d8f40746ec3447335c9642c03410f5fd3afaffected2d53139f31626bad6f8983d8e519ddde2cbba921 to < 08b1d4cab0230697bc74c63fc4e40170a7559c54affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < 3be5f24e8270ba53b3c814d13689bb8644c86237affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < d512bdefd241b98f4d7bcb5bab5614a86411fad4affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < 00dd025324b56d39d37e57a08f473dab3a660f30affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < 02d03c61e8a7b016956acb48e8a2512d16d87517affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < 4da073d57176d8e1c2bca34febfbc81d2560c1a5affected2d53139f31626bad6f8983d8e519ddde2cbba921 to < cff06b03b530ae1fe8a13e93a7848f2130e00fb4affected
Linux Linux
Default version status: affected
3.16affected0 to < 3.16unaffected5.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.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/e5fa9d8f40746ec3447335c9642c03410f5fd3af ↗
- https://git.kernel.org/stable/c/08b1d4cab0230697bc74c63fc4e40170a7559c54 ↗
- https://git.kernel.org/stable/c/3be5f24e8270ba53b3c814d13689bb8644c86237 ↗
- https://git.kernel.org/stable/c/d512bdefd241b98f4d7bcb5bab5614a86411fad4 ↗
- https://git.kernel.org/stable/c/00dd025324b56d39d37e57a08f473dab3a660f30 ↗
- https://git.kernel.org/stable/c/02d03c61e8a7b016956acb48e8a2512d16d87517 ↗
- https://git.kernel.org/stable/c/4da073d57176d8e1c2bca34febfbc81d2560c1a5 ↗
- https://git.kernel.org/stable/c/cff06b03b530ae1fe8a13e93a7848f2130e00fb4 ↗