CVE-2021-47131
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
15/03/2024
Last modified:
27/02/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
net/tls: Fix use-after-free after the TLS device goes down and up<br />
<br />
When a netdev with active TLS offload goes down, tls_device_down is<br />
called to stop the offload and tear down the TLS context. However, the<br />
socket stays alive, and it still points to the TLS context, which is now<br />
deallocated. If a netdev goes up, while the connection is still active,<br />
and the data flow resumes after a number of TCP retransmissions, it will<br />
lead to a use-after-free of the TLS context.<br />
<br />
This commit addresses this bug by keeping the context alive until its<br />
normal destruction, and implements the necessary fallbacks, so that the<br />
connection can resume in software (non-offloaded) kTLS mode.<br />
<br />
On the TX side tls_sw_fallback is used to encrypt all packets. The RX<br />
side already has all the necessary fallbacks, because receiving<br />
non-decrypted packets is supported. The thing needed on the RX side is<br />
to block resync requests, which are normally produced after receiving<br />
non-decrypted packets.<br />
<br />
The necessary synchronization is implemented for a graceful teardown:<br />
first the fallbacks are deployed, then the driver resources are released<br />
(it used to be possible to have a tls_dev_resync after tls_dev_del).<br />
<br />
A new flag called TLS_RX_DEV_DEGRADED is added to indicate the fallback<br />
mode. It&#39;s used to skip the RX resync logic completely, as it becomes<br />
useless, and some objects may be released (for example, resync_async,<br />
which is allocated and freed by the driver).
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.18 (including) | 5.10.43 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.12.10 (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:*:*:*:*:*:* |
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/0f1e6fe66977a864fe850522316f713d7b926fd9
- https://git.kernel.org/stable/c/c55dcdd435aa6c6ad6ccac0a4c636d010ee367a4
- https://git.kernel.org/stable/c/f1d4184f128dede82a59a841658ed40d4e6d3aa2
- https://git.kernel.org/stable/c/0f1e6fe66977a864fe850522316f713d7b926fd9
- https://git.kernel.org/stable/c/c55dcdd435aa6c6ad6ccac0a4c636d010ee367a4
- https://git.kernel.org/stable/c/f1d4184f128dede82a59a841658ed40d4e6d3aa2



