Skip to main content
Vulnerability Database/CVE-2026-89751

CVE-2026-89751: Linux Kernel Buffer Overflow Vulnerability

CVE-2026-89751 is a buffer overflow flaw in the Linux kernel's TDX port I/O handling that causes incorrect mask calculations. This article covers the technical details, affected versions, security impact, and mitigation strategies.

Published:

CVE-2026-89751 Overview

CVE-2026-89751 is an off-by-one flaw in the Linux kernel's Intel Trust Domain Extensions (TDX) port I/O handling code. The defect resides in handle_in() and handle_out() within arch/x86/coco/tdx/tdx.c. Both functions compute a bitmask using GENMASK(BITS_PER_BYTE * size, 0), which produces a mask one bit wider than the requested I/O width. For a single-byte INB, the code generates GENMASK(8, 0) = 0x1FF rather than the intended GENMASK(7, 0) = 0xFF. The issue affects the TDX guest path that emulates legacy port I/O through the hypervisor.

Critical Impact

The oversized mask allows an extra bit from hypervisor-supplied I/O results to reach the guest, weakening the boundary between a TDX-protected guest and untrusted VMM-provided data.

Affected Products

  • Linux kernel builds enabling Intel TDX guest support (CONFIG_INTEL_TDX_GUEST)
  • x86_64 confidential computing guests using TDX for port I/O emulation
  • Multiple stable kernel branches referenced in the upstream fix commits

Discovery Timeline

  • 2026-09-11 - CVE-2026-89751 published to NVD
  • 2026-09-14 - Last updated in NVD database

Technical Details for CVE-2026-89751

Vulnerability Analysis

The defect is a classic off-by-one error [CWE-193] in bitmask construction. Intel TDX guests cannot directly execute port I/O instructions such as INB, INW, and INL. Instead, the kernel routes these through the TDX module using a TDVMCALL, and the untrusted VMM returns the requested value. handle_in() is expected to mask that returned value down to the correct byte width before returning it to the caller.

Because GENMASK(h, l) is inclusive on both ends, GENMASK(BITS_PER_BYTE * size, 0) yields size * 8 + 1 set bits rather than size * 8. A 1-byte read returns up to 9 bits of hypervisor-controlled data, a 2-byte read returns 17 bits, and a 4-byte read returns 33 bits. The extra high-order bit is attacker-influenced data crossing the guest trust boundary.

Root Cause

The root cause is misuse of the inclusive GENMASK macro. The correct upper bound for a mask covering size bytes is BITS_PER_BYTE * size - 1. The upstream fix adjusts the calculation so the mask exactly matches the requested I/O width.

Attack Vector

Exploitation requires a malicious or compromised hypervisor supplying crafted return values to a TDX guest's port I/O emulation path. A remote network attacker cannot trigger this directly. The concern is confidential computing threat model integrity: TDX explicitly treats the VMM as untrusted, and any extra bit accepted from the VMM undermines that guarantee. Downstream consumers of the returned value that assume a properly bounded byte, word, or dword may behave incorrectly when the high bit is set.

No verified public exploit code is available. See the upstream fixes for full technical detail: Kernel Git Commit 0f63e65, Kernel Git Commit 220011fe, and Kernel Git Commit c687542.

Detection Methods for CVE-2026-89751

Indicators of Compromise

  • No runtime IOCs are published for this issue; detection is primarily version-based against patched stable kernels.
  • Unexpected values above the documented port width returned to TDX guest drivers may indicate the unpatched code path is active.

Detection Strategies

  • Inventory all TDX-enabled guest images and confirm kernel build IDs against the fixed commits listed in the NVD references.
  • Audit kernel configuration for CONFIG_INTEL_TDX_GUEST=y to scope exposure to confidential computing workloads.
  • Use distribution security trackers to map the upstream fix hashes to vendor-shipped kernel package versions.

Monitoring Recommendations

  • Monitor guest kernel logs for anomalies in drivers that perform legacy port I/O within TDX guests.
  • Track vendor advisories for backports across Long Term Support kernel branches referenced in the six upstream commits.
  • Alert on deployment of TDX guest images built from kernels predating the fix commits.

How to Mitigate CVE-2026-89751

Immediate Actions Required

  • Update TDX guest kernels to a build that includes one of the upstream fix commits, such as 0f63e65, 220011fe, 222b700, bb45f70, c4a2215, or c687542.
  • Rebuild and redeploy TDX confidential computing guest images from patched sources.
  • Coordinate with cloud providers offering TDX-based confidential VMs to confirm host and guest kernel patch status.

Patch Information

The fix corrects the mask expression in handle_in() and handle_out() in arch/x86/coco/tdx/tdx.c so that GENMASK produces exactly BITS_PER_BYTE * size bits. Patches are available across multiple stable kernel branches. Reference the upstream commits: 0f63e65, 220011fe, 222b700, bb45f70, c4a2215, and c687542.

Workarounds

  • No supported runtime workaround exists; the fix must be applied at the kernel source level.
  • Where TDX guest functionality is not required, disable CONFIG_INTEL_TDX_GUEST in custom kernel builds to remove the affected code path.
  • Restrict TDX guest deployments to trusted host platforms until patched guest kernels are rolled out.

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.