CVE-2026-63892

thunderbolt: property: Reject dir_len < 4 to prevent size_t underflow

N/A
Published: July 19, 2026 at 02:55 PM UTC
Updated: July 27, 2026 at 05:57 PM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
N/A
Exploit prediction
EPSS 0.2%

Description

In the Linux kernel, the following vulnerability has been resolved: thunderbolt: property: Reject dir_len < 4 to prevent size_t underflow On the non-root path, __tb_property_parse_dir() takes dir_len from entry->length (u16 widened to size_t). Two distinct OOB conditions follow when entry->length < 4: 1. The non-root path begins with kmemdup(&block[dir_offset], sizeof(*dir->uuid), ...) which always reads 4 dwords from dir_offset. tb_property_entry_valid() only enforces dir_offset + entry->length <= block_len, so a crafted entry with dir_offset close to the end of the property block and entry->length in 0..3 passes that gate but lets the UUID copy run off the block (e.g. dir_offset = 497, dir_len = 3 in a 500-dword block reads block[497..501]). 2. After the kmemdup, content_len = dir_len - 4 underflows size_t to ~SIZE_MAX, nentries becomes SIZE_MAX / 4, and the entry walk runs OOB on each iteration until an entry fails validation or the kernel oopses on an unmapped page. Reject dir_len < 4 on the non-root path *before* the UUID kmemdup, which closes both holes. Also move INIT_LIST_HEAD(&dir->properties) up to immediately after the dir allocation so the new error-return path (and the existing uuid-alloc failure path) calling tb_property_free_dir() sees a walkable list rather than the zero-initialized NULL next/prev that list_for_each_entry_safe() would oops on.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

4.15 ≤ v < 5.10.2594.15 ≤ v < 5.15.2104.15 ≤ v < 6.1.1764.15 ≤ v < 6.12.934.15 ≤ v < 6.18.354.15 ≤ v < 6.6.1434.15 ≤ v < 7.0.124.15 ≤ v < 7.14.15cdae7c07e3e3509eaabc18c1640a55dc5b99c179
Vendor states this is fixed in 37abc4504fa19d8f9f1e87792e8a2b8fdb308e40 (fixed)
Vendor states this is fixed in 3bec49ca55e08fb085cc4318f24b1b37eaab28cb (fixed)
Vendor states this is fixed in 542a13890b742099c461d70920e97b14e568f6ec (fixed)
Vendor states this is fixed in 5506c825f14d810f0690b1f4367cb7249ebb387a (fixed)
Vendor states this is fixed in d548179adcc87e1bc66b17e00352a1f536e76065 (fixed)
Vendor states this is fixed in de21b59c29e31c5108ddc04210631bbfab81b997 (fixed)
Vendor states this is fixed in de618299190b418291609e6921557253bd417e25 (fixed)
Vendor states this is fixed in e2d4d51cf5785815fa4e91e0c019e3eb2506a84c (fixed)
Vendor states this is fixed in 4.15 (unaffected)
Vendor states this is fixed in 5.10.259 (unaffected)
Vendor states this is fixed in 5.15.210 (unaffected)
Vendor states this is fixed in 6.1.176 (unaffected)
Vendor states this is fixed in 6.12.93 (unaffected)
Vendor states this is fixed in 6.18.35 (unaffected)
Vendor states this is fixed in 6.6.143 (unaffected)
Vendor states this is fixed in 7.0.12 (unaffected)
Vendor states this is fixed in 7.1 (unaffected)

Remediation

No guide yet

No remediation guidance has been written for this CVE yet, and no fixed version or vendor advisory is recorded against it.

Quick Info

StatusAWAITING ANALYSIS

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card