Reference page — cumulative record through Wednesday, August 19, 2026 UTC. Reference pages update as the archive grows; only dated daily editions are immutable pages of record.
Linux Linux — dm thin: make get_first_thin use rcu-safe list first function
AV AC PR UI S C I A CVSS EPSS %ile KEV
L L L N U N N H 5.5 .0024 14.8 —
AFFECTED
Product Versions Fixed
Linux b10ebd34cccae1b431caf1be54919aede2be7cbe – —
Linux 3.15 – 5.4.290
TIMELINE
Dec 29 Reserved by Linux
Jan 21 Published (CNA: Linux)
Jul 30 RESCORED — CVE-2025-21664 (Linux). CVSS 7.8 → 5.5 (NVD).
Description
In the Linux kernel, the following vulnerability has been resolved:
dm thin: make get_first_thin use rcu-safe list first function
The documentation in rculist.h explains the absence of list_empty_rcu()
and cautions programmers against relying on a list_empty() ->
list_first() sequence in RCU safe code. This is because each of these
functions performs its own READ_ONCE() of the list head. This can lead
to a situation where the list_empty() sees a valid list entry, but the
subsequent list_first() sees a different view of list head state after a
modification.
In the case of dm-thin, this author had a production box crash from a GP
fault in the process_deferred_bios path. This function saw a valid list
head in get_first_thin() but when it subsequently dereferenced that and
turned it into a thin_c, it got the inside of the struct pool, since the
list was now empty and referring to itself. The kernel on which this
occurred printed both a warning about a refcount_t being saturated, and
a UBSAN error for an out-of-bounds cpuid access in the queued spinlock,
prior to the fault itself. When the resulting kdump was examined, it
was possible to see another thread patiently waiting in thin_dtr's
synchronize_rcu.
The thin_dtr call managed to pull the thin_c out of the active thins
list (and have it be the last entry in the active_thins list) at just
the wrong moment which lead to this crash.
Fortunately, the fix here is straight forward. Switch get_first_thin()
function to use list_first_or_null_rcu() which performs just a single
READ_ONCE() and returns NULL if the list is already empty.
This was run against the devicemapper test suite's thin-provisioning
suites for delete and suspend and no regressions were observed.
Lifecycle
Complete event history — 3 events, chronological
| Date | Event | Detail |
| December 29, 2024 | Reserved | Reserved by Linux |
| January 21, 2025 | Published | Published (CNA: Linux) |
| July 30, 2026 | RESCORED | RESCORED — CVE-2025-21664 (Linux). CVSS 7.8 → 5.5 (NVD). |
Affected
Affected products and packages — 2 rows
| Vendor | Product / Package | Ecosystem | Version introduced | Fixed |
| Linux | Linux | — | b10ebd34cccae1b431caf1be54919aede2be7cbe | — |
| Linux | Linux | — | 3.15 | 5.4.290 |
About this page
This is a reference page, not a dated page of record. It assembles the complete lifecycle of CVE-2025-21664 from the CVE Program record, NVD enrichment, the CISA KEV catalog, EPSS, and OSV advisories. The box score's numbers (CVSS, EPSS, KEV status) are current as of Wednesday, August 19, 2026 UTC and are re-derived as the archive grows; only dated daily editions are immutable pages of record. The authoritative source for this identifier is cve.org.