data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-80734 in the interactive tracker

CVE-2026-80734

btrfs: initialize inode mapping flags for cached inodes

8.8 EPSS 0.6% AV:N

Published 2026-09-03 (2 months ago) by the Linux kernel CNA. Subsystem fs/btrfs. Debian urgency: unimportant.

What to do, per Debian release

Debian's own status for CVE-2026-80734 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormnot affected6.1.190-1Nothing to do. bookworm never shipped the vulnerable code.
Debian 13trixienot affected6.12.113-1Nothing to do. trixie never shipped the vulnerable code.
Debian 14forkyfixed7.1.9-1Update the kernel and reboot. Fixed in 7.1.9-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.1.9-1Update the kernel and reboot. Fixed in 7.1.9-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

[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.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

fs/btrfs/inode.c

What this is
BTRFS FILE SYSTEMMAINTAINERS section matched on fs/btrfs/ · linux-btrfs@vger.kernel.org · Maintained
Kernel module
btrfs

Check it on the machine

grep -w CONFIG_BTRFS_FS /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

lsmod | grep -w btrfs

Prints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.

Show whether Debian builds this, per release

Debian builds this as a loadable module. Every release below compiles it as a module on every flavour, so whether the code is in the running kernel depends on whether that module is loaded.

  • bookworm, trixie, forky, sidm
m
a loadable module on every flavour - check lsmod, can be blacklisted
Build switch
CONFIG_BTRFS_FS

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages

Signals

Published
2026-09-03 (2 months ago)source
CVSS
8.8 high
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.58%, higher than 46.6% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
unimportantsource
Subsystem
fs/btrfs

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
6.156.18.56e18b8236c57f
6.157.1.90d2624967117
6.157.20ef349734a93
6.12.11100
6.14.600

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:NAttack vector, network
The fault is reached from vfs_copy_file_range/splice buffered-write paths on btrfs inodes (as in the xfstest repro); on NFS-exported btrfs volumes remote clients can drive the same VFS copy_file_range path via nfsd NFSv4 COPY, making this network-reachable on NAS deployments.
AC:LAttack complexity, low
Once a btrfs volume uses CONFIG_BTRFS_EXPERIMENTAL blocksize>pagesize, an attacker can deterministically create the delayed-node/evict/re-iget sequence with ordinary writes plus memory pressure (xfstest generic/795 reproduces reliably) without uncontrollable races or layout luck.
PR:LPrivileges required, low
Triggering requires only write access to files on a mounted btrfs filesystem (or an authenticated NFS/SMB client with export write permission); no init-namespace root or non-namespace capabilities are needed beyond normal filesystem access.
UI:NUser interaction, none
No victim interaction is required; the attacker issues their own copy_file_range/write/splice syscalls (or remote COPY) after creating the inode state, without needing another user to mount, open, or click anything.
S:UScope, unchanged
Impact is confined to incorrect btrfs page-cache I/O and filesystem data/kernel stability on the host; it does not cross VM, container, IOMMU, or other security-authority boundaries.
C:HConfidentiality impact, high
Skipping btrfs_set_inode_mapping_order leaves 4K folios on 8K-sector volumes, so read paths operate on block-misaligned ranges and can return stale adjacent on-disk sectors into attacker buffers, disclosing other users' btrfs file content on shared volumes.
I:HIntegrity impact, high
Wrong mapping min folio order and stable-writes flags break btrfs block-aligned buffered I/O invariants, allowing misaligned writes/checksum-unsafe writeback that can persist corrupted data and violate CoW/checksum integrity on the affected volume.
A:HAvailability impact, high
The bug provokes kernel BUG/oops via assert_folio_range on misaligned folio ranges (documented in the fix commit), and blocks_per_folio becomes zero when folio_size<sectorsize, breaking subpage bitmap assumptions and risking further kernel faults or wedged I/O.