CVE-2026-89492

ocfs2: validate directory-index entry counts when reading metadata

State
Published
Severity
9.8 Critical
Published
Sep 11, 2026
Updated
Oct 30, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

ocfs2: validate directory-index entry counts when reading metadata

ocfs2_validate_dx_leaf() and ocfs2_validate_dx_root() check the ECC and signature of an indexed-directory block before it reaches higher-level callers, but neither validator bounds the ocfs2_dx_entry_list counts against the capacity of the block that holds them.

ocfs2_dx_dir_search() then walks

for (i = 0; i < le16_to_cpu(entry_list->de_num_used); i++) dx_entry = &entry_list->de_entries[i];

over de_num_used entries with no bounds check. entry_list is either dx_leaf->dl_list (from ocfs2_read_dx_leaf) or, for an inline root, dx_root->dr_entries. A crafted on-disk image can set de_num_used (and de_count, which is the __counted_by_le() bound of de_entries) to 0xffff and make the walk read far past the end of the 4KB metadata block, giving a slab out-of-bounds read reachable from any path lookup, stat() or open() on an indexed directory once the image is mounted.

Commit 775c17386a6f ("ocfs2: validate dx_root extent list fields during block read") already bounds dr_list for the non-inline dx_root, but left the inline dr_entries path and the dx_leaf dl_list unchecked. Add the same read-time validation for both entry lists: de_count must equal the capacity of the block (ocfs2_dx_entries_per_leaf()/per_root()) and de_num_used must not exceed de_count, rejecting corrupted metadata with -EFSCORRUPTED before ocfs2_dx_dir_search() can walk an out-of-range entry array.

de_count is always written as exactly the block capacity when a leaf or inline root is formatted, so the equality check does not reject any valid image.

Found by 0sec automated security-research tooling (https://0sec.ai).

Scores

CVSSScoreVectorSource
3.19.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before 3f28574dd59672ac47f3110c9a8ead703ec021c0Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before 3497aa757788de5d904f41814f1df0b292a8be09Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before 47b8152ed7709f7ef30b398fb0bfe4b452dd0495Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before aad3129b8e915d0ff492bb7517d825d8490cfdd9Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before 5e661f55ca8568471fce558effe81cca112f5cb2Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before fcfcba8fe17dbf2c8805690b8cc25e32d81249a4Affected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before b8a5c0c32df2c5b685ceef76ac77e37c7e1dc3edAffected
  • 9b7895efac906d66d19856194e1ba61f37e231a4 to before bc70726ddad53c7e9a9a85915bf2415b0d4f42f9Affected
LinuxLinux
  • 2.6.30Affected
  • before 2.6.30Not affected
  • 5.10.273 through 5.10.*Not affected
  • 5.15.224 through 5.15.*Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.160 through 6.6.*Not affected
  • 6.12.111 through 6.12.*Not affected
  • 6.18.51 through 6.18.*Not affected
  • 7.2.4 through 7.2.*Not affected
  • 7.3 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.