kvm: avoid speculation-based attacks from out-of-range memslot accesses
Key facts
- Attack vector
- Local
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Impact type
- —
- Confidentiality · integrity · availability
- High · None · High
- Fix status
- Partial Red Hat: 3 without a fix
Attack profile from CVSS 3.1 · NVD. Fix status from CNA and Red Hat.
Summary
In the Linux kernel, the following vulnerability has been resolved: kvm: avoid speculation-based attacks from out-of-range memslot accesses KVM's mechanism for accessing guest memory translates a guest physical address (gpa) to a host virtual address using the right-shifted gpa (also known as gfn) and a struct kvm_memory_slot. The translation is performed in __gfn_to_hva_memslot using the following formula: hva = slot->userspace_addr + (gfn - slot->base_gfn) * PAGE_SIZE It is expected that gfn falls within the boundaries of the guest's physical memory. However, a guest can access invalid physical addresses in such a way that the gfn is invalid. __gfn_to_hva_memslot is called from kvm_vcpu_gfn_to_hva_prot, which first retrieves a memslot through __gfn_to_memslot. While __gfn_to_memslot does check that the gfn falls within the boundaries of the guest's physical memory or not, a CPU can speculate the result of the check and continue execution speculatively using an illegal gfn. The speculation can result in calculating an out-of-bounds hva. If the resulting host virtual address is used to load another guest physical address, this is effectively a Spectre gadget consisting of two consecutive reads, the second of which is data dependent on the first. Right now it's not clear if there are any cases in which this is exploitable. One interesting case was reported by the original author of this patch, and involves visiting guest page tables on x86. Right now these are not vulnerable because the hva read goes through get_user(), which contains an LFENCE speculation barrier. However, there are patches in progress for x86 uaccess.h to mask kernel addresses instead of using LFENCE; once these land, a guest could use speculation to read from the VMM's ring 3 address space. Other architectures such as ARM already use the address masking method, and would be susceptible to this same kind of data-dependent access gadgets. Therefore, this patch proactively protects from these attacks by masking out-of-bounds gfns in __gfn_to_hva_memslot, which blocks speculation of invalid hvas. Sean Christopherson noted that this patch does not cover kvm_read_guest_offset_cached. This however is limited to a few bytes past the end of the cache, and therefore it is unlikely to be useful in the context of building a chain of data dependent accesses.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| Linux | Linux | 2.6.25 and later | 4.4.273, 4.9.273, 4.14.237, 4.19.195, 5.4.126, 5.10.44, 5.12.11, 5.13 | Patch available | CNA |
- Linux VendorLinux Affected 2.6.25 and later Fixed in 4.4.273, 4.9.273, 4.14.237, 4.19.195, 5.4.126, 5.10.44, 5.12.11, 5.13 Patch available CNA
CPE configurations NVD · 6
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | before 4.4.273; 4.5 to before 4.9.273; 4.10 to before 4.14.237; 4.15 to before 4.19.195; 4.20 to before 5.4.126; 5.5 to before 5.10.44; 5.11 to before 5.12.11 | Vulnerable | Linux |
| cpe:2.3:o:linux:linux_kernel:5.13:rc1:*:*:*:*:*:* | 5.13 rc1 | Vulnerable | Linux |
| cpe:2.3:o:linux:linux_kernel:5.13:rc2:*:*:*:*:*:* | 5.13 rc2 | Vulnerable | Linux |
| cpe:2.3:o:linux:linux_kernel:5.13:rc3:*:*:*:*:*:* | 5.13 rc3 | Vulnerable | Linux |
| cpe:2.3:o:linux:linux_kernel:5.13:rc4:*:*:*:*:*:* | 5.13 rc4 | Vulnerable | Linux |
| cpe:2.3:o:linux:linux_kernel:5.13:rc5:*:*:*:*:*:* | 5.13 rc5 | Vulnerable | Linux |
- cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* Versions before 4.4.273; 4.5 to before 4.9.273; 4.10 to before 4.14.237; 4.15 to before 4.19.195; 4.20 to before 5.4.126; 5.5 to before 5.10.44; 5.11 to before 5.12.11 Vulnerable ·Linux
- cpe:2.3:o:linux:linux_kernel:5.13:rc1:*:*:*:*:*:* Versions 5.13 rc1 Vulnerable ·Linux
- cpe:2.3:o:linux:linux_kernel:5.13:rc2:*:*:*:*:*:* Versions 5.13 rc2 Vulnerable ·Linux
- cpe:2.3:o:linux:linux_kernel:5.13:rc3:*:*:*:*:*:* Versions 5.13 rc3 Vulnerable ·Linux
- cpe:2.3:o:linux:linux_kernel:5.13:rc4:*:*:*:*:*:* Versions 5.13 rc4 Vulnerable ·Linux
- cpe:2.3:o:linux:linux_kernel:5.13:rc5:*:*:*:*:*:* Versions 5.13 rc5 Vulnerable ·Linux
Remediation
- Fix · CNA Linux (Linux) Fixed in 4.4.273, 4.9.273, 4.14.237, 4.19.195, 5.4.126, 5.10.44, 5.12.11, 5.13
Vendor assessments
Red Hat
Red Hat rating: Moderate. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Red Hat Enterprise Linux 6 | Affected | No fix planned: Out of support scope |
| Red Hat Enterprise Linux 7 | Affected | No fix planned: Out of support scope |
| Red Hat Enterprise Linux 8 | Affected | No fix planned: Out of support scope |
Not affected: 1 product
- Red Hat Enterprise Linux 9
Timeline
- 2026-10-02 Threatist record created from CVE-2021-47277
- 2026-10-03 Alias added: GHSA-6239-6f98-f8vf
References
Patch 8
- https://git.kernel.org/stable/c/3098b86390a6b9ea52657689f08410baf130ceff
- https://git.kernel.org/stable/c/740621309b25bbf619b8a0ba5fd50a8e58989441
- https://git.kernel.org/stable/c/361ce3b917aff93123e9e966d8608655c967f438
- https://git.kernel.org/stable/c/22b87fb17a28d37331bb9c1110737627b17f6781
- https://git.kernel.org/stable/c/bff1fbf0cf0712686f1df59a83fba6e31d2746a0
- https://git.kernel.org/stable/c/7af299b97734c7e7f465b42a2139ce4d77246975
- https://git.kernel.org/stable/c/ed0e2a893092c7fcb4ff7ba74e5efce53a6f5940
- https://git.kernel.org/stable/c/da27a83fd6cc7780fea190e1f5c19e87019da65c
More Linux Kernel vulnerabilities
- TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
- TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
- TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
- TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
- TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
- TI-2021-05514 Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACE KEVCVSS 3.1HIGH 8.3
Sources
- CVE-2021-47277 · CVE Program
- CVE-2021-47277 · NVD
- FIRST EPSS
- GHSA-6239-6f98-f8vf · GitHub Advisory Database · CC BY 4.0
- CVE-2021-47277 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences