CVE-2026-89574
massOut-of-bounds kernel read in Linux dm-array metadata parsing (dm-cache)
The dm-array metadata structure in the Linux kernel, used by the dm-cache target, validated only the block number and checksum of on-disk array block headers, leaving structural fields (value_size, max_entries, nr_entries) unchecked on read. When a dm-cache target is activated, dm_cache_load_mappings() drives dm_array_cursor_next(), which uses the on-disk nr_entries as its loop bound while element_at() performs unguarded pointer arithmetic, so a crafted header with an inflated entry count keeps the cursor in one block while the index walks off the end of the dm-bufio buffer. A local attacker with the privileges needed to activate a device-mapper target backed by attacker-crafted metadata can therefore trigger an out-of-bounds read of kernel memory (potential information disclosure) and system instability, reflected in a CVSS 3.1 base score of 7.8 (local vector, low privileges). In principle all Linux systems running kernels without this fix are affected, though exploitation requires local access plus the ability to supply a malicious metadata block device, and a count below real capacity could also trip kernel BUG_ON() paths in fill_ablock()/trim_ablock(). No public proof of concept or in-the-wild exploitation is known.
What to do: Apply distribution kernel updates as soon as the dm-array header-validation fix is backported (no fixed version numbers were specified in the advisory). Until patched, restrict which users or services can create and activate device-mapper targets (CAP_SYS_ADMIN), and only activate dm-cache targets against metadata block devices or disk images from trusted sources. Investigate any kernel crash or BUG_ON during dm-cache activation on unpatched systems as a potential sign of malicious metadata.
| Linux kernel (dm-array / device-mapper cache) | Versions prior to the fixing commit; the upstream notice does not enumerate specific version ranges, and fixed versions will vary by stable branch and distribut |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: dm array: validate array block headers on read array_block_check() validates blocknr and csum and nothing else, while node_check(), next to it, has bounded the structural fields since both were written. dm_array_cursor_next() takes its loop bound from the on-disk nr_entries and element_at() is unguarded pointer arithmetic, so a count larger than the block holds keeps the cursor in one block while the index grows past it and the read walks off the dm-bufio buffer -- dm_cache_load_mappings() drives it once per cache block at activation. Check the header against itself: reject a zero value_size, require max_entries to equal calc_max_entries() for that value_size and block size, and require nr_entries to fit. Equality rather than an upper bound, since a count below the real capacity trips BUG_ON() in fill_ablock() and trim_ablock(). Metadata dm-array writes satisfies all three.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.