CVE-2025-38066: dm cache: prevent BUG_ON by blocking retries on failed device resumes
In the Linux kernel, the following vulnerability has been resolved:
dm cache: prevent BUGON by blocking retries on failed device resumes
A cache device failing to resume due to mapping errors should not be retried, as the failure leaves a partially initialized policy object. Repeating the resume operation risks triggering BUGON when reloading cache mappings into the incomplete policy object.
Reproduce steps:
1. create a cache metadata consisting of 512 or more cache blocks, with some mappings stored in the first array block of the mapping array. Here we use cacherestore v1.0 to build the metadata.
cat <<EOF >> cmeta.xml <superblock uuid="" blocksize="128" nrcacheblocks="512" \ policy="smq" hintwidth="4"> <mappings> <mapping cacheblock="0" originblock="0" dirty="false"/> </mappings> </superblock> EOF dmsetup create cmeta --table "0 8192 linear /dev/sdc 0" cacherestore -i cmeta.xml -o /dev/mapper/cmeta --metadata-version=2 dmsetup remove cmeta
2. wipe the second array block of the mapping array to simulate data degradations.
mappingroot=$(dd if=/dev/sdc bs=1c count=8 skip=192 \ 2>/dev/null | hexdump -e '1/8 "%u\n"') ablock=$(dd if=/dev/sdc bs=1c count=8 skip=$((4096mappingroot+2056)) \ 2>/dev/null | hexdump -e '1/8 "%u\n"') dd if=/dev/zero of=/dev/sdc bs=4k count=1 seek=$ablock
3. try bringing up the cache device. The resume is expected to fail due to the broken array block.
dmsetup create cmeta --table "0 8192 linear /dev/sdc 0" dmsetup create cdata --table "0 65536 linear /dev/sdc 8192" dmsetup create corig --table "0 524288 linear /dev/sdc 262144" dmsetup create cache --notable dmsetup load cache --table "0 524288 cache /dev/mapper/cmeta \ /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0" dmsetup resume cache
4. try resuming the cache again. An unexpected BUGON is triggered while loading cache mappings.
dmsetup resume cache
Kernel logs:
(snip) ------------[ cut here ]------------ kernel BUG at drivers/md/dm-cache-policy-smq.c:752! Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI CPU: 0 UID: 0 PID: 332 Comm: dmsetup Not tainted 6.13.4 #3 RIP: 0010:smqloadmapping+0x3e5/0x570
Fix by disallowing resume operations for devices that failed the initial attempt.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
debian/linuxto a version that resolves this vulnerability.Fixed in 6.1.176-1Fixed in 6.1.190-1Fixed in 6.12.107-1Fixed in 6.12.113-1Fixed in 7.2.12-1Fixed in 7.2.13-1 - Compensating control
Do not retry resume operations for cache devices whose initial resume attempt failed, because retrying can trigger BUG_ON while reloading cache mappings into a partially initialized policy object.
Event History
Frequently Asked Questions
What is the severity of CVE-2025-38066?
CVE-2025-38066 has been classified as a moderate severity vulnerability due to its potential impact on system stability.
How do I fix CVE-2025-38066?
To fix CVE-2025-38066, update the Linux kernel to the latest version where this vulnerability has been resolved.
What are the potential consequences of CVE-2025-38066?
The potential consequences of CVE-2025-38066 include system crashes or unstable behavior due to retries on failed device resumes.
Is CVE-2025-38066 exploitable by remote attackers?
CVE-2025-38066 is not directly exploitable by remote attackers, as it primarily affects local system operations.
Which versions of the Linux kernel are affected by CVE-2025-38066?
CVE-2025-38066 affects specific versions of the Linux kernel prior to the latest security patches that address this issue.