Skip to main content

Linux btrfs EUVDEUVD-2026-70338

| CVE-2026-80734 HIGH
2026-09-03 Linux GHSA-rfxq-m8fc-mrw6
8.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Mount btrfs with block_size > page_size
  2. Delivery
    Create inode and trigger delayed update
  3. Exploit
    Allow inode eviction under memory pressure
  4. Execution
    Re-read inode via btrfs_iget()
  5. Persist
    Cached path skips mapping flag initialization
  6. Impact
    Folio order mismatch triggers kernel BUG/panic

Vulnerability Assessment

Exploitation Conditions

Three conditions must be met simultaneously: (1) a btrfs filesystem formatted and mounted with a block size strictly greater than the host memory page size - this requires explicit mkfs.btrfs -s or equivalent non-default configuration set by an administrator; (2) local process access with write permissions to that filesystem to trigger the create/update/evict inode sequence; and (3) a kernel version in the affected commit ranges prior to the stable fixes in Linux 6.14.6 or 7.2. Standard btrfs deployments with default block size (equal to page size) are completely unaffected. Remote unauthenticated exploitation is not possible given the requirement for local filesystem access and administrator-configured non-default block size.

Impact

The assigned CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N, C:H/I:H/A:H, score 8.8) is materially inconsistent with the described vulnerability. The attack vector is not network-accessible; triggering the defect requires local access to a btrfs volume configured with a non-default large block size, plus an inode eviction event - making AV:L and AC:H more accurate. The C:H and I:H impact ratings are unsupported by the technical description, which documents only a kernel assertion failure (kernel panic), consistent solely with A:H. The low EPSS score (0.20%, 10th percentile), absence from CISA KEV, and lack of any published proof-of-concept all reinforce that this is a stability regression addressed by a maintenance patch rather than an exploitable security event. Even a mid-sized municipal IT team in gniezno running btrfs volumes with explicit large-block-size configuration on 4K-page servers would realistically face only accidental triggered crashes, not targeted attack. Overall priority is low - this is a targeted patch for specific btrfs deployments with non-default configuration.

Exploit ScenarioDerived

A local user with write access to a btrfs filesystem mounted with block size exceeding the system page size (e.g., 8K blocks on a 4K-page host) creates files and performs I/O, then system memory pressure or a manual cache drop evicts those inodes from the kernel inode cache while their delayed_nodes remain. When the kernel later re-reads an affected inode - for example, during a splice or file-range-copy operation - it skips mapping flag initialization, allocates an undersized folio in the page cache, and hits the assertion in extent_io.c, panicking the kernel. This scenario was reproduced deterministically by kernel developers using the generic/795 xfstest on QEMU with 8K block size and 4K page size; no exploit code targeting this as a security primitive has been published.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 04, 2026

Btrfs in the Linux kernel fails to reinitialize inode address-space mapping flags and minimum folio order when re-reading previously evicted cached inodes, causing a kernel assertion failure and system crash (denial of service). The defect surfaces only when btrfs is mounted with a block size larger than the host memory page size - a non-default but valid configuration - and manifests after a create/evict/re-read inode cycle. No public exploit code exists and EPSS is 0.20% (10th percentile), reflecting negligible real-world exploitation probability beyond accidental triggering.

RemediationAI

Apply upstream stable kernel patches: commit 0d26249671171ab759cb4fdce673554a690fa655 (https://git.kernel.org/stable/c/0d26249671171ab759cb4fdce673554a690fa655) or 0ef349734a93227b45f65fc50a3311d1cc5f03e9 (https://git.kernel.org/stable/c/0ef349734a93227b45f65fc50a3311d1cc5f03e9), included in stable releases Linux 6.14.6 and Linux 7.2 per EUVD. If an immediate kernel update is not feasible, the effective compensating control is to avoid mounting btrfs volumes with a block size larger than the system page size - the mkfs.btrfs -s or mount-time block size option that enables this configuration should be left at default. Switching to default block sizes introduces no data-integrity risk on new volumes; existing volumes formatted with large block sizes would require reformatting to change the block size, which erases data.

Affected VersionsENISA

Linux ecde48a1a6b3256bd49db8780bf37556b157783c <0d26249671171ab759cb4fdce673554a690fa655
Linux patch: 7.2
Linux 6.14.6 <6.15
Linux patch: 0
Linux ae584726e6eddf6cfbe49b3f4a78b3197716b6f8
Linux patch: 7.1.9
Linux ecde48a1a6b3256bd49db8780bf37556b157783c <0ef349734a93227b45f65fc50a3311d1cc5f03e9
Linux 6.15

Affected Packages

euvd linux fix: 6.15

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The btrfs filesystem in the Linux kernel supports block sizes exceeding the host page size on recent kernel versions. For such configurations, btrfs must program the VFS inode address_space's minimum folio order (via btrfs_set_inode_mapping_order()) so that page cache folios are at least as large as the block size. This is correctly performed during inode creation via btrfs_create_new_inode(). However, a subsequent btrfs_update_inode() call enqueues a delayed_node into root->delayed_nodes. If the in-memory inode is evicted under memory pressure while the delayed_node persists, a later btrfs_iget() call creates a new VFS inode with default zero-order mapping and, in btrfs_read_locked_inode(), detects the cached delayed_node and jumps directly to cache_index - bypassing btrfs_update_inode_mapping_flags() and btrfs_set_inode_mapping_order(). The resulting folio order mismatch causes an ASSERT failure in extent_io.c:1404 and a kernel BUG/panic. The CWE field is listed as N/A; the root cause is effectively a missing re-initialization on the cached inode path (closest to CWE-909 Missing Initialization of Resource). Affected CPE: cpe:2.3:a:linux:linux.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 4.7 MEDIUM

Local write access to non-default large-block-size btrfs volume required; impact is kernel panic only, no confidentiality or integrity loss.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE 4.7 MEDIUM
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat 5.5 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Sep 04, 2026 - 05:22 NVD
8.8 (HIGH)
Patch available
Sep 03, 2026 - 10:16 EUVD
CVE Published
Sep 03, 2026 - 08:21 cve.org
UNKNOWN (no severity yet)
CVE Published
Sep 03, 2026 - 08:21 cve.org
HIGH 8.8

DescriptionCVE.org

In the Linux kernel, the following vulnerability has been resolved:

btrfs: initialize inode mapping flags for cached inodes

[BUG] When running generic/795 with 8K block size, 4K page size, the test always fails, triggering some ASSERT()s related to folio size:

795 (241074): drop_caches: 3 assertion failed: IS_ALIGNED(start, blocksize) && IS_ALIGNED(end + 1, blocksize), in extent_io.c:1404 (blocksize=8192 root=262 ino=258 start=16826368 end=16830463 mapping min order=0) ------------[ cut here ]------------ kernel BUG at extent_io.c:1404! Oops: invalid opcode: 0000 [#1] SMP CPU: 8 UID: 0 PID: 241105 Comm: fsstress Tainted: G OE 7.2.0-rc5-custom+ #442 PREEMPT(full) f4bfb352566f3949f29c233ce6f735050a03b245 Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 02/02/2022 RIP: 0010:assert_folio_range.cold+0x3d/0x3f [btrfs] Call Trace: <TASK> btrfs_read_folio+0x9e/0x170 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3] prepare_one_folio.constprop.0+0x104/0x2a0 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3] btrfs_buffered_write+0x285/0xa50 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3] btrfs_do_write_iter+0x1aa/0x210 [btrfs 4cd1dd93b341b8ef766643f9512f4a86259567a3] iter_file_splice_write+0x31a/0x540 direct_splice_actor+0x53/0x170 splice_direct_to_actor+0xe9/0x240 do_splice_direct+0x76/0xb0 vfs_copy_file_range+0x1fd/0x630 __x64_sys_copy_file_range+0xf9/0x220 do_syscall_64+0xe1/0x790 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]---

The ASSERT() itself is added by a later patch. The crash is triggered with that new debug patch, and without this fix.

[CAUSE] In the above case, the start 16826368 is properly 8K aligned, but the end (16830463 + 1) is not 8K aligned. Furthermore the mapping's minimal folio order is 0, not the expected 1 for 8K block size with 4K page size.

So this means some inodes do not have btrfs_set_inode_mapping_order() called on it.

The missing btrfs_set_inode_mapping_order() call happens for cached inodes, through the following events:

  • btrfs_create_new_inode() called for inode X

Which properly sets minimal folio order for the VFS inode.

  • btrfs_update_inode() called for inode X

Which calls btrfs_delayed_update_inode() to create a delayed_node into root->delayed_nodes xarray.

  • Drop cache/memory pressure, evicting in-memory inode X

Which evicted the inode X, but delayed_node is still in root->delayed_nodes for future reuse.

  • btrfs_iget() for inode X called again

btrfs_iget()

|- btrfs_iget_locked() | |- iget5_locked_rcu() | Which creates a new vfs_inode for btrfs, whose mapping still | has the minimal order as 0. | |- btrfs_read_locked_inode() |- btrfs_fill_inode() | |- btrfs_get_delayed_node() | Which found out the previous node, and use that delayed | node to initialize the new inode. | |- filled = true; |- if (filled) goto cache_index; Which skips the btrfs_update_inode_mapping_flags() and btrfs_set_inode_mapping_order() calls. So the inode still has minimal folio order set as 0, not the required 1.

Thus later page cache read will get a folio whose size is smaller than block size, as the mapping has its minimal folio order set as 0 not 1, then trigger the ASSERT().

[FIX] Move the btrfs_update_inode_mapping_flags() and btrfs_set_inode_mapping_order() calls under cache_index label, so that the mapping flags and minimal folio order is always set no matter if we have a cached inode.

Executive ViewAI

Why It Matters

Btrfs filesystem in the Linux kernel can crash when mounted with non-default block size configurations, disrupting system availability. The vulnerability requires local access and specific filesystem operations to trigger; real-world exploitation risk is negligible (EPSS 0.2%, no active exploitation). Organizations using Btrfs with custom block sizes should prioritize patching to maintain system uptime.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Medium
btrfs common on Linux, but large-block-size config is rare
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Medium

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy