Cloudanix VulnDB

CVE-2026-45934

Medium · 5.5

CVSS

5.5

EPSS

0.2%

Published

May 27, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A flaw in some Linux systems can cause a storage volume to stop working when local activity triggers a rare filesystem allocation error.

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

What it actually does

This is a local denial-of-service flaw in the Linux kernel Btrfs filesystem. Under specific Btrfs chunk-allocation conditions, especially DUP metadata/data profiles or forced chunk allocation paths, non-consecutive free-space gaps can cause overlapping device extents to be selected. When Btrfs later inserts pending block group device extents, it can encounter an unexpected EEXIST condition, abort the active filesystem transaction, and mark the filesystem as errored. The practical technical result is loss of availability for the affected Btrfs filesystem, potentially including remount-read-only behavior, failed writes, service disruption, or a system requiring administrative recovery. The issue does not indicate direct confidentiality or privilege-escalation impact from the provided data.

Why it matters to the business

Systems using Btrfs can experience storage outages or application failures if a local user or workload triggers the vulnerable allocation path. Because the impact is availability-only but can affect a mounted filesystem, business consequences may include failed writes, interrupted services, degraded hosts, emergency maintenance, and possible recovery from backups or filesystem repair procedures. The EPSS score is very low and the vulnerability is not listed in CISA KEV, so broad internet-scale exploitation is unlikely; however, organizations with production Btrfs deployments should still prioritize patching where local users, containers, test automation, or untrusted workloads can exercise filesystem allocation behavior.

How an attack unfolds

An attacker first needs local access to a Linux system using Btrfs and enough permissions or workload control to cause Btrfs chunk allocation activity. The attacker then creates filesystem pressure or invokes allocation-triggering operations so Btrfs attempts DUP chunk allocation across a layout with non-consecutive gaps. On vulnerable kernels, the allocator can create overlapping chunk maps or select duplicate physical address ranges. During transaction completion, Btrfs attempts to insert device extent records for pending block groups; because the extents overlap or already exist, insertion fails with errno -17, EEXIST. Btrfs treats this as a serious filesystem consistency error, aborts the transaction, and moves the filesystem into an errored state. Applications using that filesystem may then see I/O failures, and the affected host or service may require administrator intervention, remounting, rebooting, or filesystem recovery after patching.

How to fix it

Upgrade to a Linux kernel version that includes the upstream Btrfs fix for this issue. No exact fixed package versions were provided in the input, so use the fixed kernel packages from the relevant Linux distribution, vendor advisory, or stable kernel branch once available. Prioritize systems that use Btrfs for production data, container storage, build hosts, CI systems, developer workstations with untrusted local users, or multi-user servers. If immediate patching is not possible, reduce exposure by limiting local shell access, restricting untrusted workloads on Btrfs-backed storage, avoiding experimental Btrfs features where possible, and monitoring for Btrfs transaction-abort events. General mitigations do not fully eliminate risk because the flaw is in kernel filesystem allocation logic.

How to confirm the fix worked

Confirm the running kernel has been updated to a vendor release that contains the Btrfs chunk-allocation fix. Validate both the installed package and the active booted kernel, because kernel updates usually require a reboot. On Linux systems, compare `uname -r` with the fixed kernel version listed by the distribution advisory, and verify package-manager metadata for the installed kernel. Confirm affected filesystems are Btrfs by checking `findmnt -t btrfs`, `/proc/mounts`, or `btrfs filesystem show`. After remediation, review kernel logs for absence of new Btrfs transaction aborts during normal write-heavy workloads. For high-assurance validation, run controlled Btrfs allocation and write-stress testing on a patched non-production host and confirm no `BTRFS: Transaction aborted (error -17)` or `Object already exists` events are generated.

Typical attack path

  1. Gain local access to a Linux system that has a mounted Btrfs filesystem.
  2. Identify or influence a Btrfs filesystem using vulnerable chunk allocation conditions, such as DUP allocation behavior.
  3. Generate filesystem operations that force additional Btrfs chunk allocation, such as sustained writes, metadata-heavy activity, or allocation-triggering administrative interfaces where accessible.
  4. Trigger the vulnerable non-consecutive-gap allocation path that can produce overlapping chunk maps or duplicate device extents.
  5. Cause Btrfs transaction completion to fail while inserting pending block group device extents with EEXIST.
  6. Result in Btrfs transaction abort and availability loss for the affected filesystem or services depending on it.

How to detect it

To determine whether this flaw has already been triggered, review kernel and system logs from Btrfs hosts for transaction-abort events and Btrfs errors containing errno -17, EEXIST, or Object already exists. Useful sources include `journalctl -k`, `/var/log/kern.log`, `/var/log/messages`, `/var/log/syslog`, crash dumps, kdump outputs, and centralized Linux kernel log ingestion. Focus on messages from the `btrfs` kernel module around write failures, remount-read-only events, filesystem error states, or application outages tied to Btrfs mount points. Look for stack traces referencing `btrfs_create_pending_block_groups`, `insert_dev_extents`, `__btrfs_end_transaction`, or `btrfs_force_chunk_alloc_store`. There are no network indicators because exploitation is local and filesystem-based. If such logs are found, preserve kernel logs, collect mount and Btrfs filesystem metadata, confirm the running kernel version, and assess whether data recovery or filesystem checks are required before returning the system to service.

  • BTRFS: Transaction aborted (error -17)
  • BTRFS: error (device
  • btrfs_create_pending_block_groups
  • insert_dev_extents()
  • Object already exists
  • errno=-17
  • __btrfs_end_transaction
  • btrfs_force_chunk_alloc_store
  • fs/btrfs/block-group.c
  • WARNING: fs/btrfs/block-group.c
  • Modules linked in: virtio_net btrfs
  • state A) in btrfs_create_pending_block_groups

What your security team should do

  • Inventory Linux systems using Btrfs and rank them by business criticality, multi-user exposure, and whether untrusted workloads can write to Btrfs-backed storage.
  • Patch affected systems with vendor-supplied fixed kernel packages and reboot into the fixed kernel; prioritize Btrfs-backed production, CI, container, and shared-user systems.
  • Where patching is delayed, restrict local access and untrusted workload execution on systems using Btrfs, and avoid enabling experimental Btrfs behavior unless required.
  • Create monitoring for kernel log messages indicating Btrfs transaction aborts, EEXIST errors, overlapping extent symptoms, or filesystem state transitions to error/read-only.
  • Review recent kernel logs on Btrfs systems for signs that the issue has already occurred, especially around unexplained application write failures or storage incidents.
  • Ensure backups and recovery procedures are current for important Btrfs filesystems before applying kernel updates or performing filesystem recovery operations.

The record

In the Linux kernel, the following vulnerability has been resolved: btrfs: fix EEXIST abort due to non-consecutive gaps in chunk allocation I have been observing a number of systems aborting at insert_dev_extents() in btrfs_create_pending_block_groups(). The following is a sample stack trace of such an abort coming from forced chunk allocation (typically behind CONFIG_BTRFS_EXPERIMENTAL) but this can theoretically happen to any DUP chunk allocation. [81.801] ------------[ cut here ]------------ [81.801] BTRFS: Transaction aborted (error -17) [81.801] WARNING: fs/btrfs/block-group.c:2876 at btrfs_create_pending_block_groups+0x721/0x770 [btrfs], CPU#1: bash/319 [81.802] Modules linked in: virtio_net btrfs xor zstd_compress raid6_pq null_blk [81.803] CPU: 1 UID: 0 PID: 319 Comm: bash Kdump: loaded Not tainted 6.19.0-rc6+ #319 NONE [81.803] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.17.0-2-2 04/01/2014 [81.804] RIP: 0010:btrfs_create_pending_block_groups+0x723/0x770 [btrfs] [81.806] RSP: 0018:ffffa36241a6bce8 EFLAGS: 00010282 [81.806] RAX: 000000000000000d RBX: ffff8e699921e400 RCX: 0000000000000000 [81.807] RDX: 0000000002040001 RSI: 00000000ffffffef RDI: ffffffffc0608bf0 [81.807] RBP: 00000000ffffffef R08: ffff8e69830f6000 R09: 0000000000000007 [81.808] R10: ffff8e699921e5e8 R11: 0000000000000000 R12: ffff8e6999228000 [81.808] R13: ffff8e6984d82000 R14: ffff8e69966a69c0 R15: ffff8e69aa47b000 [81.809] FS: 00007fec6bdd9740(0000) GS:ffff8e6b1b379000(0000) knlGS:0000000000000000 [81.809] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [81.810] CR2: 00005604833670f0 CR3: 0000000116679000 CR4: 00000000000006f0 [81.810] Call Trace: [81.810] <TASK> [81.810] __btrfs_end_transaction+0x3e/0x2b0 [btrfs] [81.811] btrfs_force_chunk_alloc_store+0xcd/0x140 [btrfs] [81.811] kernfs_fop_write_iter+0x15f/0x240 [81.812] vfs_write+0x264/0x500 [81.812] ksys_write+0x6c/0xe0 [81.812] do_syscall_64+0x66/0x770 [81.812] entry_SYSCALL_64_after_hwframe+0x76/0x7e [81.813] RIP: 0033:0x7fec6be66197 [81.814] RSP: 002b:00007fffb159dd30 EFLAGS: 00000202 ORIG_RAX: 0000000000000001 [81.815] RAX: ffffffffffffffda RBX: 00007fec6bdd9740 RCX: 00007fec6be66197 [81.815] RDX: 0000000000000002 RSI: 0000560483374f80 RDI: 0000000000000001 [81.816] RBP: 0000560483374f80 R08: 0000000000000000 R09: 0000000000000000 [81.816] R10: 0000000000000000 R11: 0000000000000202 R12: 0000000000000002 [81.817] R13: 00007fec6bfb85c0 R14: 00007fec6bfb5ee0 R15: 00005604833729c0 [81.817] </TASK> [81.817] irq event stamp: 20039 [81.818] hardirqs last enabled at (20047): [<ffffffff99a68302>] __up_console_sem+0x52/0x60 [81.818] hardirqs last disabled at (20056): [<ffffffff99a682e7>] __up_console_sem+0x37/0x60 [81.819] softirqs last enabled at (19470): [<ffffffff999d2b46>] __irq_exit_rcu+0x96/0xc0 [81.819] softirqs last disabled at (19463): [<ffffffff999d2b46>] __irq_exit_rcu+0x96/0xc0 [81.820] ---[ end trace 0000000000000000 ]--- [81.820] BTRFS: error (device dm-7 state A) in btrfs_create_pending_block_groups:2876: errno=-17 Object already exists Inspecting these aborts with drgn, I observed a pattern of overlapping chunk_maps. Note how stripe 1 of the first chunk overlaps in physical address with stripe 0 of the second chunk. Physical Start Physical End Length Logical Type Stripe ---------------------------------------------------------------------------------------------------- 0x0000000102500000 0x0000000142500000 1.0G 0x0000000641d00000 META|DUP 0/2 0x0000000142500000 0x0000000182500000 1.0G 0x0000000641d00000 META|DUP 1/2 0x0000000142500000 0x0000000182500000 1.0G 0x0000000601d00000 META|DUP 0/2 0x0000000182500000 0x00000001c2500000 1.0G 0x0000000601d00000 META|DUP 1/2 Now how could this possibly happen? All chunk allocation is ---truncated---

Affected packages

Ecosystem Package Introduced Fixed