CVE-2021-47496CWE-787

CVE-2021-47496

Critical · published May 22, 2024

CVSS v3.1
9.8
EPSS
0%
Percentile
40.7
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

net/tls: Fix flipped sign in tls_err_abort() calls

sk->sk_err appears to expect a positive value, a convention that ktls

doesn't always follow and that leads to memory corruption in other code.

For instance,

[kworker]

tls_encrypt_done(..., err=<negative error from crypto request>)

tls_err_abort(.., err)

sk->sk_err = err;

[task]

splice_from_pipe_feed

...

tls_sw_do_sendpage

if (sk->sk_err) {

ret = -sk->sk_err; // ret is positive

splice_from_pipe_feed (continued)

ret = actor(...) // ret is still positive and interpreted as bytes

// written, resulting in underflow of buf->len and

// sd->len, leading to huge buf->offset and bogus

// addresses computed in later calls to actor()

Fix all tls_err_abort() callers to pass a negative error code

consistently and centralize the error-prone sign flip there, throwing in

a warning to catch future misuse and uninlining the function so it

really does only warn once.

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00483 · 40.7th percentile
Weakness
CWE-787 · Out-of-bounds Write
Published
2024-05-22T13:15Z
Affected products (10)
ProductVersionsFixed in
linux/linux_kernel≥ 4.17, < 5.4.1575.4.157
linux/linux_kernel≥ 5.5, < 5.10.775.10.77
linux/linux_kernel≥ 5.11, < 5.14.165.14.16
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (8)
EPSS history
Timeline
  • 22 MAY 08:19Z
    net/tls: Fix flipped sign in tls_err_abort() calls
    cvelistv5