KernelScan.io

HIGH Introduced in 3.9

dm ArrayBlock OOB

CVE-2026-89573

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI6.5MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: dm array: reject an array block whose value size is not the caller's array_block_check() can only compare the header against itself, so a block with value_size 4 and max_entries 1018 is internally consistent and passes. dm-cache keeps two arrays -- mappings at 8 bytes and hints at 4 -- and the roots for both live in the superblock. Point the mappings root at a hint block and __load_mappings() walks it through an info whose value size is 8, so element_at() strides 8 bytes over 4-byte entries and reaches offset 8160 of a 4096-byte block. get_ablock() and __shadow_ablock() are the two places that hold the block and the caller at once. Reject there when the two value sizes disagree. Arrays only ever read their own blocks, so this fires on crafted metadata only.

02

Engine v0.6.0

Risk summary

A crafted dm-cache metadata block can cause the kernel to interpret array entries with the wrong element stride, reading and writing far beyond the allocated buffer. An attacker needs root or CAP_SYS_ADMIN to activate a dm-cache target using the crafted metadata, limiting exposure to scenarios where untrusted block devices are fed to device-mapper. The result is kernel heap corruption leading to information disclosure and denial of service.

Affecteddrivers/md/persistent-data/dm-array.c (dm persistent data)

Vulnerability analysis

The dm-array metadata validator only checks a block's header for internal consistency, so a block whose stored element size differs from what the caller expects passes validation. When dm-cache's mappings root is redirected at a hint block with a smaller element size, the array-walking code strides through the 4096-byte buffer using the larger mapping stride, reaching offsets well past the end of the block and corrupting adjacent kernel heap. The fix adds a cross-check when loading array blocks, rejecting any block whose stored element size does not match what the caller expects. The bug fires only on crafted dm-cache metadata supplied on a block device, and activating a dm-cache target requires CAP_SYS_ADMIN in the init namespace, so an attacker must either have root-level access or compromise a privileged storage management service that configures device-mapper targets.

03

BranchIntroducedFixed inPatch commit
5.103.95.10.27035cd3b278448
5.153.95.15.221a8237cb8fa0a
6.13.96.1.188a530a9a419a7
6.123.96.12.1097bf4b5cb42a4
6.183.96.18.50ac4a5eb8b002
6.63.96.6.157522fa26da24c
7.23.97.2.4cb409b38b023
mainline3.97.34538a287bdf5
cip/5.103.95.10.271-cip7835cd3b278448
cip/6.13.96.1.189-cip61a530a9a419a7
cip/6.1-rt3.96.1.189-cip61-rt32a530a9a419a7
cip/6.123.96.12.111-cip327bf4b5cb42a4

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Fixed in 5.10.271-cip78
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)
cip/4.4Affected — no CIP fix yet (latest 4.4.302-cip115)
cip/4.4-rtAffected — no CIP fix yet (latest 4.4.302-cip115-rt63)