CVE-2025-39791: dm: dm-crypt: Do not partially accept write BIOs with zoned targets
In the Linux kernel, the following vulnerability has been resolved:
dm: dm-crypt: Do not partially accept write BIOs with zoned targets
Read and write operations issued to a dm-crypt target may be split
according to the dm-crypt internal limits defined by the max_read_size
and max_write_size module parameters (default is 128 KB). The intent is
to improve processing time of large BIOs by splitting them into smaller
operations that can be parallelized on different CPUs.
For zoned dm-crypt targets, this BIO splitting is still done but without
the parallel execution to ensure that the issuing order of write
operations to the underlying devices remains sequential. However, the
splitting itself causes other problems:
1) Since dm-crypt relies on the block layer zone write plugging to
handle zone append emulation using regular write operations, the
reminder of a split write BIO will always be plugged into the target
zone write plugged. Once the on-going write BIO finishes, this
reminder BIO is unplugged and issued from the zone write plug work.
If this reminder BIO itself needs to be split, the reminder will be
re-issued and plugged again, but that causes a call to a
blk_queue_enter(), which may block if a queue freeze operation was
initiated. This results in a deadlock as DM submission still holds
BIOs that the queue freeze side is waiting for.
2) dm-crypt relies on the emulation done by the block layer using
regular write operations for processing zone append operations. This
still requires to properly return the written sector as the BIO
sector of the original BIO. However, this can be done correctly only
and only if there is a single clone BIO used for processing the
original zone append operation issued by the user. If the size of a
zone append operation is larger than dm-crypt max_write_size, then
the orginal BIO will be split and processed as a chain of regular
write operations. Such chaining result in an incorrect written sector
being returned to the zone append issuer using the original BIO
sector. This in turn results in file system data corruptions using
xfs or btrfs.
Fix this by modifying get_max_request_size() to always return the size
of the BIO to avoid it being split with dm_accpet_partial_bio() in
crypt_map(). get_max_request_size() is renamed to
get_max_request_sectors() to clarify the unit of the value returned
and its interface is changed to take a struct dm_target pointer and a
pointer to the struct bio being processed. In addition to this change,
to ensure that crypt_alloc_buffer() works correctly, set the dm-crypt
device max_hw_sectors limit to be at most
BIO_MAX_VECS << PAGE_SECTORS_SHIFT (1 MB with a 4KB page architecture).
This forces DM core to split write BIOs before passing them to
crypt_map(), and thus guaranteeing that dm-crypt can always accept an
entire write BIO without needing to split it.
This change does not have any effect on the read path of dm-crypt. Read
operations can still be split and the BIO fragments processed in
parallel. There is also no impact on the performance of the write path
given that all zone write BIOs were already processed inline instead of
in parallel.
This change also does not affect in any way regular dm-crypt block
devices.
Security readout for executives and security teams
Plain-English summary
A Linux kernel flaw can deadlock storage operations or corrupt XFS/Btrfs data when dm-crypt encrypts zoned block devices. It affects a specialized storage configuration, not ordinary dm-crypt devices. Because successful triggering could compromise availability and data integrity, exposed systems warrant prompt remediation and integrity checks.
Executive priority
Prioritize within the normal high-severity patch window, accelerating systems with zoned encrypted storage or critical XFS/Btrfs data. Broad emergency action is not supported because ordinary dm-crypt devices are unaffected and no active exploitation is reported.
Technical view
dm-crypt incorrectly splits large write BIOs on zoned targets. Repeated splitting can deadlock during queue freezing, while split zone-append emulation can return an incorrect written sector and corrupt XFS or Btrfs data. The fix prevents partial BIO acceptance and constrains request sizing. Read processing and regular, non-zoned dm-crypt devices are unaffected.
Likely exposure
Exposure is limited to Linux systems using dm-crypt over zoned block devices. The bundle identifies affected releases including 6.10, 6.12.44, 6.16.4, and 6.17, but its version data is incomplete or ambiguous. Confirm distribution-specific status and whether zoned dm-crypt is actually configured.
Exploitation context
The CVSS 3.1 score is 7.8 with local access and low privileges required, without user interaction. CISA KEV status is false, and the supplied sources do not report active exploitation. The documented consequences are storage deadlock and filesystem data corruption rather than remote compromise.
Researcher notes
The vulnerable path involves dm_accept_partial_bio behavior in crypt_map for zoned targets. Fixes make the maximum request calculation BIO-aware, avoid dm-crypt splitting writes, and cap hardware sectors so DM core performs safe splitting earlier. The bundle provides three stable commits but does not map each commit cleanly to every affected release.
Mitigation direction
Apply a vendor-supported kernel update incorporating the referenced stable fixes.
Prioritize systems using dm-crypt with zoned block devices and XFS or Btrfs.
If immediate patching is impossible, consult vendor guidance for supported configuration mitigations.
Back up critical data before remediation and preserve verified recovery copies.
Validation and detection
Inventory kernel versions and distribution advisories for CVE-2025-39791.
Determine whether dm-crypt targets use zoned underlying block devices.
Verify the installed kernel contains the applicable referenced stable fix.
Review affected systems for storage stalls, queue-freeze hangs, or filesystem corruption indicators.
Run vendor-supported filesystem integrity checks during an approved maintenance window.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2025-39791 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
0ADP providers
4Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.