CVE-2021-47267
Severity CVSS v4.0:
Pending analysis
Type:
CWE-476
NULL Pointer Dereference
Publication date:
21/05/2024
Last modified:
04/04/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
usb: fix various gadget panics on 10gbps cabling<br />
<br />
usb_assign_descriptors() is called with 5 parameters,<br />
the last 4 of which are the usb_descriptor_header for:<br />
full-speed (USB1.1 - 12Mbps [including USB1.0 low-speed @ 1.5Mbps),<br />
high-speed (USB2.0 - 480Mbps),<br />
super-speed (USB3.0 - 5Gbps),<br />
super-speed-plus (USB3.1 - 10Gbps).<br />
<br />
The differences between full/high/super-speed descriptors are usually<br />
substantial (due to changes in the maximum usb block size from 64 to 512<br />
to 1024 bytes and other differences in the specs), while the difference<br />
between 5 and 10Gbps descriptors may be as little as nothing<br />
(in many cases the same tuning is simply good enough).<br />
<br />
However if a gadget driver calls usb_assign_descriptors() with<br />
a NULL descriptor for super-speed-plus and is then used on a max 10gbps<br />
configuration, the kernel will crash with a null pointer dereference,<br />
when a 10gbps capable device port + cable + host port combination shows up.<br />
(This wouldn&#39;t happen if the gadget max-speed was set to 5gbps, but<br />
it of course defaults to the maximum, and there&#39;s no real reason to<br />
artificially limit it)<br />
<br />
The fix is to simply use the 5gbps descriptor as the 10gbps descriptor,<br />
if a 10gbps descriptor wasn&#39;t provided.<br />
<br />
Obviously this won&#39;t fix the problem if the 5gbps descriptor is also<br />
NULL, but such cases can&#39;t be so trivially solved (and any such gadgets<br />
are unlikely to be used with USB3 ports any way).
Impact
Base Score 3.x
6.30
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.9.273 (excluding) | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.10 (including) | 4.14.237 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.15 (including) | 4.19.195 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.20 (including) | 5.4.126 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.44 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.12.11 (excluding) |
| cpe:2.3:o:linux:linux_kernel:5.13:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.13:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.13:rc3:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.13:rc4:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.13:rc5:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/032e288097a553db5653af552dd8035cd2a0ba96
- https://git.kernel.org/stable/c/45f9a2fe737dc0a5df270787f2231aee8985cd59
- https://git.kernel.org/stable/c/5ef23506695b01d5d56a13a092a97f2478069d75
- https://git.kernel.org/stable/c/70cd19cb5bd94bbb5bacfc9c1e4ee0071699a604
- https://git.kernel.org/stable/c/b972eff874637402ddc4a7dd11fb22538a0b6d28
- https://git.kernel.org/stable/c/ca6bc277430d90375452b60b047763a090b7673e
- https://git.kernel.org/stable/c/fd24be23abf3e94260be0f00bb42c7e91d495f87
- https://git.kernel.org/stable/c/032e288097a553db5653af552dd8035cd2a0ba96
- https://git.kernel.org/stable/c/45f9a2fe737dc0a5df270787f2231aee8985cd59
- https://git.kernel.org/stable/c/5ef23506695b01d5d56a13a092a97f2478069d75
- https://git.kernel.org/stable/c/70cd19cb5bd94bbb5bacfc9c1e4ee0071699a604
- https://git.kernel.org/stable/c/b972eff874637402ddc4a7dd11fb22538a0b6d28
- https://git.kernel.org/stable/c/ca6bc277430d90375452b60b047763a090b7673e
- https://git.kernel.org/stable/c/fd24be23abf3e94260be0f00bb42c7e91d495f87



