CVE-2021-47226CWE-203

CVE-2021-47226

High · published May 21, 2024

CVSS v3.1
7.1
EPSS
0%
Percentile
12.3
In the wild
Unconfirmed
What it is

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

x86/fpu: Invalidate FPU state after a failed XRSTOR from a user buffer

Both Intel and AMD consider it to be architecturally valid for XRSTOR to

fail with #PF but nonetheless change the register state. The actual

conditions under which this might occur are unclear [1], but it seems

plausible that this might be triggered if one sibling thread unmaps a page

and invalidates the shared TLB while another sibling thread is executing

XRSTOR on the page in question.

__fpu__restore_sig() can execute XRSTOR while the hardware registers

are preserved on behalf of a different victim task (using the

fpu_fpregs_owner_ctx mechanism), and, in theory, XRSTOR could fail but

modify the registers.

If this happens, then there is a window in which __fpu__restore_sig()

could schedule out and the victim task could schedule back in without

reloading its own FPU registers. This would result in part of the FPU

state that __fpu__restore_sig() was attempting to load leaking into the

victim task's user-visible state.

Invalidate preserved FPU registers on XRSTOR failure to prevent this

situation from corrupting any state.

[1] Frequent readers of the errata lists might imagine "complex

microarchitectural conditions".

The record
Technical detail
CVSS v3.1
7.1 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00224 · 12.3th percentile
Weakness
CWE-203 · Observable Discrepancy
Published
2024-05-21T19:15Z
Affected products (8)
ProductVersionsFixed in
linux/linux_kernel≥ 5.2, < 5.10.465.10.46
linux/linux_kernel≥ 5.11, < 5.12.135.12.13
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 (6)
EPSS history
Timeline
  • 21 MAY 14:19Z
    x86/fpu: Invalidate FPU state after a failed XRSTOR from a user buffer
    cvelistv5