CVE-2021-47587
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
19/06/2024
Last modified:
01/11/2024
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net: systemport: Add global locking for descriptor lifecycle<br />
<br />
The descriptor list is a shared resource across all of the transmit queues, and<br />
the locking mechanism used today only protects concurrency across a given<br />
transmit queue between the transmit and reclaiming. This creates an opportunity<br />
for the SYSTEMPORT hardware to work on corrupted descriptors if we have<br />
multiple producers at once which is the case when using multiple transmit<br />
queues.<br />
<br />
This was particularly noticeable when using multiple flows/transmit queues and<br />
it showed up in interesting ways in that UDP packets would get a correct UDP<br />
header checksum being calculated over an incorrect packet length. Similarly TCP<br />
packets would get an equally correct checksum computed by the hardware over an<br />
incorrect packet length.<br />
<br />
The SYSTEMPORT hardware maintains an internal descriptor list that it re-arranges<br />
when the driver produces a new descriptor anytime it writes to the<br />
WRITE_PORT_{HI,LO} registers, there is however some delay in the hardware to<br />
re-organize its descriptors and it is possible that concurrent TX queues<br />
eventually break this internal allocation scheme to the point where the<br />
length/status part of the descriptor gets used for an incorrect data buffer.<br />
<br />
The fix is to impose a global serialization for all TX queues in the short<br />
section where we are writing to the WRITE_PORT_{HI,LO} registers which solves<br />
the corruption even with multiple concurrent TX queues being used.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 3.16 (including) | 4.4.296 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.5 (including) | 4.9.294 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.10 (including) | 4.14.259 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.15 (including) | 4.19.222 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.20 (including) | 5.4.168 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.88 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.11 (excluding) |
| cpe:2.3:o:linux:linux_kernel:5.16:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.16:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.16:rc3:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.16:rc4:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:5.16: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/595a684fa6f23b21958379a18cfa83862c73c2e1
- https://git.kernel.org/stable/c/6e1011cd183faae8daff275c72444edcdfe0d473
- https://git.kernel.org/stable/c/8b8e6e782456f1ce02a7ae914bbd5b1053f0b034
- https://git.kernel.org/stable/c/8ed2f5d08d6e59f8c78b2869bfb95d0be32c094c
- https://git.kernel.org/stable/c/c675256a7f131f5ba3f331efb715e8f31ea0e392
- https://git.kernel.org/stable/c/de57f62f76450b934de8203711bdc4f7953c3421
- https://git.kernel.org/stable/c/eb4687c7442942e115420a30185f8d83faf37696
- https://git.kernel.org/stable/c/f3fde37d3f0d429f0fcce214cb52588a9e21260e



