Cloudanix VulnDB

CVE-2026-46251

High · 8.4

CVSS

8.4

EPSS

0.2%

Published

Jun 3, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A flaw in Linux’s Btrfs storage code can let local activity destabilize the system or corrupt filesystem operations, so affected machines should be updated promptly.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Moderate
Impact
Denial Of Service
Component
OS kernel
Class
Memory Corruption
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This is a Linux kernel Btrfs memory-corruption flaw in transaction commit handling when the Btrfs EXTENT_TREE_V2 incompatibility feature is enabled. The block group tree can be added to a commit list even though it is already linked through normal dirty-root tracking, corrupting the kernel linked-list pointers in the Btrfs root dirty_list. On later transaction commits or block-group creation, the corrupted lists can cause kernel warnings, transaction aborts, filesystem errors, denial of service, and potentially broader kernel memory corruption. Because the flaw is in kernel-space filesystem code and the CVSS vector is local with no privileges required, a local user or workload with access to perform filesystem activity on an affected Btrfs filesystem may be able to trigger high-impact confidentiality, integrity, and availability consequences if exploitation is weaponized.

Why it matters to the business

Systems using affected Linux kernels with Btrfs filesystems, especially filesystems using the newer EXTENT_TREE_V2 feature, may experience filesystem transaction aborts, kernel instability, forced read-only remounts, crashes, data-integrity risk, or service outages. The vulnerability is not listed in CISA KEV, has no known public exploit maturity in the supplied data, and has a low EPSS score, so broad internet-scale exploitation is not currently indicated; however, kernel memory-corruption issues still warrant timely patching on multi-user servers, container hosts, developer workstations, storage nodes, and any environment where untrusted local code can write to Btrfs-backed storage.

How an attack unfolds

An attacker first needs local code execution or the ability to run an untrusted workload on a host using an affected Linux kernel with a writable Btrfs filesystem that has EXTENT_TREE_V2 enabled. The attacker performs filesystem operations that cause Btrfs allocations and dirty a block group, then forces or waits for a transaction commit through normal filesystem synchronization behavior. During commit handling, the vulnerable kernel path incorrectly links the block group root into a commit list even though it may already be linked on another dirty-tracking list. This corrupts linked-list metadata in kernel memory. Subsequent commits or block-group operations can trigger list validation failures, Btrfs root lookup failures, transaction aborts, and possibly a kernel crash or filesystem disruption. No public exploit is indicated in the supplied intelligence, but because the primitive is kernel memory corruption, defenders should treat exposed multi-user systems as higher risk than the low EPSS alone suggests.

How to fix it

Apply the Linux kernel update from the relevant distribution or kernel vendor that includes the Btrfs fix for the block_group_tree dirty_list corruption issue. No exact fixed package versions were provided in the input, so use vendor advisories and kernel changelogs to confirm inclusion of the patch titled similar to "btrfs: fix block_group_tree dirty_list corruption." After updating, reboot into the fixed kernel and ensure the old vulnerable kernel is not selected by default. Where immediate patching is not possible, reduce exposure by avoiding Btrfs filesystems with EXTENT_TREE_V2 on affected kernels, limiting local shell access, preventing untrusted containers or build jobs from writing to Btrfs-backed storage, restricting user-mountable filesystems, and maintaining current backups before performing heavy Btrfs maintenance or migration operations.

How to confirm the fix worked

Confirm the running kernel version with uname -r and verify the installed kernel package includes the vendor fix for this Btrfs patch, not merely that the package is downloaded. Reboot and confirm the active kernel is the fixed kernel. Inventory Btrfs usage with commands such as findmnt -t btrfs and review filesystem feature flags with appropriate Btrfs tooling, such as btrfs inspect-internal dump-super, looking for EXTENT_TREE_V2 where supported. Review kernel logs with dmesg or journalctl -k for Btrfs list corruption, transaction abort, or root lookup errors before and after remediation. On patched test systems, normal Btrfs write, allocation, and sync activity should not produce list_del corruption warnings or Btrfs transaction aborts associated with switch_commit_roots or btrfs_commit_transaction.

Typical attack path

  1. Gain the ability to run local code or an untrusted workload on a Linux system using an affected kernel.
  2. Identify or access a writable Btrfs filesystem, particularly one created or mounted with the EXTENT_TREE_V2 incompatibility feature.
  3. Perform filesystem writes, allocations, or metadata-changing operations that dirty Btrfs block group state.
  4. Trigger or wait for transaction commit activity, such as sync, fsync, periodic writeback, or normal Btrfs transaction completion.
  5. Cause corruption of the Btrfs block group root dirty_list / commit-list linkage inside kernel memory.
  6. Leverage the resulting condition to cause Btrfs transaction aborts, filesystem unavailability, kernel warnings/oopses, crashes, or potentially further kernel compromise if a reliable exploit is developed.

How to detect it

To determine whether the issue was already triggered, review kernel logs from dmesg, journalctl -k, /var/log/kern.log, /var/log/messages, and centralized log collectors for Btrfs warnings, linked-list corruption reports, transaction aborts, and call traces around transaction commits. Focus on events from hosts using Btrfs, especially where EXTENT_TREE_V2 is enabled. Look for kernel traces involving __list_del_entry_valid_or_report, switch_commit_roots, btrfs_commit_transaction, ksys_sync, and BTRFS transaction abort messages. Correlate timestamps with local user sessions, container jobs, build workloads, storage stress tests, backup jobs, or any process issuing heavy writes or sync operations. Evidence of exploitation will likely look like kernel instability or filesystem failure rather than a clean network IOC. Preserve kernel logs, crash dumps, pstore records, vmcore files, and Btrfs diagnostic output if suspicious crashes or transaction aborts occurred.

  • list_del corruption. next->prev should be
  • __list_del_entry_valid_or_report
  • switch_commit_roots
  • btrfs_commit_transaction
  • BTRFS critical
  • unable to find root key (1 0 0) in tree 1
  • BTRFS: Transaction aborted (error -117)
  • fs/btrfs/root-tree.c:153
  • lib/list_debug.c:65
  • ksys_sync
  • [btrfs]
  • EXTENT_TREE_V2

What your security team should do

  • Prioritize patching Linux systems that use Btrfs for production storage, shared compute, container hosting, CI/CD workloads, multi-user access, or untrusted local workloads.
  • Identify all Btrfs mounts and determine whether EXTENT_TREE_V2 is enabled; treat those systems as the primary exposure set.
  • Monitor kernel logs centrally for Btrfs transaction aborts, list corruption warnings, and call traces involving switch_commit_roots or btrfs_commit_transaction.
  • Where patching must be delayed, restrict local access and untrusted workload execution on systems with writable Btrfs filesystems.
  • Ensure recent, restorable backups exist for affected Btrfs volumes before heavy write workloads, maintenance, or kernel changes.
  • Track distribution advisories for exact fixed kernel versions because no fixed versions were supplied in the vulnerability metadata.
  • Do not rely solely on EPSS or KEV status for prioritization; local kernel memory-corruption flaws can be serious on systems where untrusted code can run.

The record

In the Linux kernel, the following vulnerability has been resolved: btrfs: fix block_group_tree dirty_list corruption When the incompat flag EXTENT_TREE_V2 is set, we unconditionally add the block group tree to the switch_commits list before calling switch_commit_roots, as we do for the tree root and the chunk root. However, the block group tree uses normal root dirty tracking and in any transaction that does an allocation and dirties a block group, the block group root will already be linked to a list by the dirty_list field and this use of list_add_tail() is invalid and corrupts the prev/next members of block_group_root->dirty_list. This is apparent on a subsequent list_del on the prev if we enable CONFIG_DEBUG_LIST: [32.1571] ------------[ cut here ]------------ [32.1572] list_del corruption. next->prev should beffff958890202538, but was ffff9588992bd538. (next=ffff958890201538) [32.1575] WARNING: lib/list_debug.c:65 at 0x0, CPU#3: sync/607 [32.1583] CPU: 3 UID: 0 PID: 607 Comm: sync Not tainted 6.18.0 #24PREEMPT(none) [32.1585] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS1.17.0-4.fc41 04/01/2014 [32.1587] RIP: 0010:__list_del_entry_valid_or_report+0x108/0x120 [32.1593] RSP: 0018:ffffaa288287fdd0 EFLAGS: 00010202 [32.1594] RAX: 0000000000000001 RBX: ffff95889326e800 RCX:ffff958890201538 [32.1596] RDX: ffff9588992bd538 RSI: ffff958890202538 RDI:ffffffff82a41e00 [32.1597] RBP: ffff958890202538 R08: ffffffff828fc1e8 R09:00000000ffffefff [32.1599] R10: ffffffff8288c200 R11: ffffffff828e4200 R12:ffff958890201538 [32.1601] R13: ffff95889326e958 R14: ffff958895c24000 R15:ffff958890202538 [32.1603] FS: 00007f0c28eb5740(0000) GS:ffff958af2bd2000(0000)knlGS:0000000000000000 [32.1605] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [32.1607] CR2: 00007f0c28e8a3cc CR3: 0000000109942005 CR4:0000000000370ef0 [32.1609] Call Trace: [32.1610] <TASK> [32.1611] switch_commit_roots+0x82/0x1d0 [btrfs] [32.1615] btrfs_commit_transaction+0x968/0x1550 [btrfs] [32.1618] ? btrfs_attach_transaction_barrier+0x23/0x60 [btrfs] [32.1621] __iterate_supers+0xe8/0x190 [32.1622] ? __pfx_sync_fs_one_sb+0x10/0x10 [32.1623] ksys_sync+0x63/0xb0 [32.1624] __do_sys_sync+0xe/0x20 [32.1625] do_syscall_64+0x73/0x450 [32.1626] entry_SYSCALL_64_after_hwframe+0x76/0x7e [32.1627] RIP: 0033:0x7f0c28d05d2b [32.1632] RSP: 002b:00007ffc9d988048 EFLAGS: 00000246 ORIG_RAX:00000000000000a2 [32.1634] RAX: ffffffffffffffda RBX: 00007ffc9d988228 RCX:00007f0c28d05d2b [32.1636] RDX: 00007f0c28e02301 RSI: 00007ffc9d989b21 RDI:00007f0c28dba90d [32.1637] RBP: 0000000000000001 R08: 0000000000000001 R09:0000000000000000 [32.1639] R10: 0000000000000000 R11: 0000000000000246 R12:000055b96572cb80 [32.1641] R13: 000055b96572b19f R14: 00007f0c28dfa434 R15:000055b96572b034 [32.1643] </TASK> [32.1644] irq event stamp: 0 [32.1644] hardirqs last enabled at (0): [<0000000000000000>] 0x0 [32.1646] hardirqs last disabled at (0): [<ffffffff81298817>]copy_process+0xb37/0x2260 [32.1648] softirqs last enabled at (0): [<ffffffff81298817>]copy_process+0xb37/0x2260 [32.1650] softirqs last disabled at (0): [<0000000000000000>] 0x0 [32.1652] ---[ end trace 0000000000000000 ]--- Furthermore, this list corruption eventually (when we happen to add a new block group) results in getting the switch_commits and dirty_cowonly_roots lists mixed up and attempting to call update_root on the tree root which can't be found in the tree root, resulting in a transaction abort: [87.8269] BTRFS critical (device nvme1n1): unable to find root key (1 0 0) in tree 1 [87.8272] ------------[ cut here ]------------ [87.8274] BTRFS: Transaction aborted (error -117) [87.8275] WARNING: fs/btrfs/root-tree.c:153 at 0x0, CPU#4: sync/703 [87.8285] CPU: 4 UID: 0 PID: 703 Comm: sync Not tainted 6.18.0 #25 PREEMPT(none) [87.8287] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.17.0-4.fc41 0 ---truncated---

Affected packages

Ecosystem Package Introduced Fixed