LiveActive security incident?Get immediate response
CVE Record

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.

HighCVSS 7.8Not KEV-listedUpdated
Glexia's TakeAutomated analysishigh

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.
Prepared
Confidence
high
Sources
5

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.

Open ATT&CK lookup
Vulnerability profileCVE Program record
Severity
High
CVSS
7.8 (3.1)
Known Exploited
No
Published

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

Official CVE source material

CNA and ADP enrichment extracted from CVE v5

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.

ScoreVersionSeverityVectorExploitImpactSource
7.8CVSS 3.1HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H1.85.9Linux

Vulnerability scoring details

Base CVSS 3.1 score

7.8High
CVSS 3.1 vector shape for CVE-2025-39791Attack VectorAttack ComplexityPrivileges RequiredUser InteractionScopeConfidentiality ImpactIntegrity ImpactAvailability Impact

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

Attack Vector
NetworkAdjacentLocalPhysical
Attack Complexity
LowHigh
Privileges Required
NoneLowHigh
User Interaction
NoneRequired
Scope
ChangedUnchanged
Confidentiality Impact
HighLowNone
Integrity Impact
HighLowNone
Availability Impact
HighLowNone

Vulnerability timeline

Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.

  1. CVE reservedCVE Program

    The CVE ID was reserved by the assigning CNA.

  2. CVE publishedCVE Program

    The CVE record was published.

  3. CVE updatedCVE Program

    The CVE record metadata indicates this as the latest update time.

Affected products

Products and packages named in the record

VendorProductVersion / packageStatus
LinuxLinuxf211268ed1f9bdf48f06a3ead5f5d88437450579, f211268ed1f9bdf48f06a3ead5f5d88437450579, f211268ed1f9bdf48f06a3ead5f5d88437450579unaffected
LinuxLinux6.10, 0, 6.12.44, 6.16.4, 6.17affected
Weakness

CWE details

No CWE listed

CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.