CVE-2026-63892

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

State
Published
Severity
Not scored
Published
Jul 19, 2026
Updated
Jul 19, 2026
Reserved
Jul 19, 2026

Read the record on cve.org

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.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before 37abc4504fa19d8f9f1e87792e8a2b8fdb308e40Affected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before e2d4d51cf5785815fa4e91e0c019e3eb2506a84cAffected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before de618299190b418291609e6921557253bd417e25Affected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before 5506c825f14d810f0690b1f4367cb7249ebb387aAffected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before 542a13890b742099c461d70920e97b14e568f6ecAffected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before d548179adcc87e1bc66b17e00352a1f536e76065Affected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before 3bec49ca55e08fb085cc4318f24b1b37eaab28cbAffected
  • cdae7c07e3e3509eaabc18c1640a55dc5b99c179 to before de21b59c29e31c5108ddc04210631bbfab81b997Affected
LinuxLinux
  • 4.15Affected
  • before 4.15Not affected
  • 5.10.259 through 5.10.*Not affected
  • 5.15.210 through 5.15.*Not affected
  • 6.1.176 through 6.1.*Not affected
  • 6.6.143 through 6.6.*Not affected
  • 6.12.93 through 6.12.*Not affected
  • 6.18.35 through 6.18.*Not affected
  • 7.0.12 through 7.0.*Not affected
  • 7.1 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.