RustSec logo

History ⋅ Edit ⋅ JSON (OSV)

RUSTSEC-2026-0484

Inverted bitmap validation in invalidate_l2_cached_ept

Reported
Issued
Package
tdx-guest (crates.io)
Type
Vulnerability
Categories
Keywords
#tdx #tdcall #ept #l2-vm
Aliases
References
CVSS Score
4.6 MEDIUM
CVSS Details
Attack Complexity
Low
Attack Requirements
None
Attack Vector
Local
Privileges Required
High
Availability Impact to the Subsequent System
None
Confidentiality Impact to the Subsequent System
None
Integrity Impact to the Subsequent System
None
User Interaction
None
Availability Impact to the Vulnerable System
Low
Confidentiality Impact to the Vulnerable System
Low
Integrity Impact to the Vulnerable System
Low
CVSS Vector
CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
Patched
  • >=0.3.1
Unaffected
  • <0.1.8
Affected Functions
Version
tdx_guest::tdcall::invalidate_l2_cached_ept
  • >=0.1.8, <0.3.1

Description

tdx_guest::tdcall::invalidate_l2_cached_ept() takes a bitmap that selects the L2 VMs whose cached EPT translations should be invalidated. Bits 1 through 3 select L2 VMs 1 through 3, and all other bits are reserved. The input check was inverted:

if l2_vm_idx_bitmap & !0b1110 == 0 {
    return Err(TdCallError::TdxOperandInvalid);
}

l2_vm_idx_bitmap & !0b1110 isolates the bits that are not allowed. A result of zero means the bitmap is valid, and the function returned an error in that case. Every valid bitmap, such as 0b0010 or 0b1110, was therefore rejected with TdxOperandInvalid. Bitmaps with reserved bits set, such as 0b0001 or 0b1_0000, were forwarded to the TDX module.

Intel describes the issue as an incorrect comparison and classifies it as escalation of privilege, with a CVSS 4.0 base score of 4.6, in INTEL-SA-01462.

The flaw was corrected in commit 311d33b, released in 0.3.1. The function now rejects an empty bitmap and any bit outside 0b1110.

Reported by Borys Tsyrulnikov.

Advisory available under CC0-1.0 license.