Cloudanix VulnDB

CVE-2026-43338

Medium · 5.5

CVSS

5.5

EPSS

0.1%

Published

May 8, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A local user may be able to overload certain Linux filesystems with quota operations and cause applications that depend on them to stop writing data or go offline.

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
Low

What it actually does

This is a local denial-of-service flaw in the Linux kernel Btrfs filesystem quota-group handling. Btrfs qgroup ioctl operations can join a transaction without reserving enough metadata space for quota-tree updates and delayed references. On a filesystem that is close to metadata exhaustion, repeated qgroup operations can force Btrfs to consume the global block reserve and fail delayed-reference processing with ENOSPC. The kernel then aborts the Btrfs transaction, which can remount the filesystem read-only, interrupt unmount or sync operations, and make the affected filesystem temporarily unavailable until administrative recovery is performed.

Why it matters to the business

Systems using Btrfs with quotas or qgroups enabled may experience filesystem disruption if a local user or workload can trigger excessive quota-group operations on a space-constrained filesystem. The practical impact is service interruption, failed writes, read-only remounts, operational recovery work, and potential downtime for applications relying on the affected filesystem. The issue is local-only, has low observed exploitation likelihood, is not listed in CISA KEV, and has no known ransomware association, so urgency is highest for multi-user Linux systems, shared hosting, container platforms, developer workstations, and storage hosts where untrusted or semi-trusted users can run Btrfs quota-management operations.

How an attack unfolds

An attacker needs local access with sufficient privileges or delegated capability to perform Btrfs quota-group operations against a mounted Btrfs filesystem. They first identify or create a Btrfs filesystem where quotas are enabled or can be enabled, then reduce available space or wait for the filesystem to approach ENOSPC conditions. The attacker repeatedly creates or modifies many qgroups using Btrfs quota ioctls. Because vulnerable kernels do not reserve enough transaction items for the quota-tree updates and delayed references generated by these operations, transaction commit or unmount processing can fail while running delayed references. The kernel logs Btrfs delayed-reference failures and aborts the transaction, causing the filesystem to become unavailable or read-only and disrupting dependent services. There is no indication from the provided data of remote exploitation, privilege escalation, data theft, KEV listing, or active exploitation by named threat actors.

How to fix it

Apply a vendor kernel update that includes the Btrfs fix to reserve sufficient transaction items for qgroup ioctls. Because no exact fixed package versions were provided, use the relevant Linux distribution or kernel vendor advisory to identify the corrected kernel build and reboot into it after installation. Where immediate patching is not possible, reduce exposure by disabling Btrfs quotas/qgroups where they are not required, restricting who can run Btrfs administration commands or access qgroup ioctls, avoiding delegation of filesystem-management privileges to untrusted users, and maintaining adequate free metadata/data space on Btrfs filesystems. Monitor and alert on filesystems approaching ENOSPC, especially systems that use qgroups heavily. For critical systems, test the updated kernel against quota-management workloads before broad rollout.

How to confirm the fix worked

Confirm that the running kernel, not just the installed package, is updated to a vendor build containing the Btrfs qgroup transaction-reservation fix. Validate with `uname -r`, distribution package metadata, and vendor security advisories. Confirm that Btrfs filesystems using quotas can perform representative qgroup create, delete, assign, and rescan operations under safe test conditions without producing Btrfs transaction aborts or delayed-reference ENOSPC errors in `dmesg` or `journalctl -k`. Check `btrfs quota show`, `btrfs qgroup show`, and filesystem usage with `btrfs filesystem usage` to ensure quota state is healthy. Do not run destructive stress reproductions on production filesystems; use a disposable test filesystem if behavioral validation is required.

Typical attack path

  1. Gain local shell or code execution on a Linux system using a Btrfs filesystem.
  2. Determine that Btrfs quotas/qgroups are enabled or that the user can enable or manipulate them.
  3. Drive the target filesystem close to available-space exhaustion, especially metadata exhaustion.
  4. Run many Btrfs qgroup create or update operations through the btrfs userspace tool or equivalent ioctls.
  5. Trigger transaction commit, sync, or unmount activity that forces delayed references to run.
  6. Cause delayed-reference processing to fail with ENOSPC and abort the Btrfs transaction.
  7. Disrupt applications using the filesystem through read-only remount, failed writes, unmount failure, or required administrative repair/reboot.

How to detect it

Review kernel logs and system journals for Btrfs transaction aborts, delayed-reference failures, ENOSPC errors, and read-only remounts. Useful sources include `dmesg`, `journalctl -k`, `/var/log/kern.log`, `/var/log/syslog`, `/var/log/messages`, auditd logs, shell history, sudo logs, and endpoint telemetry that records process execution. Look for sequences where `btrfs quota enable`, `btrfs qgroup create`, or other qgroup operations occur in high volume before errors such as `failed to run delayed ref`, `Transaction aborted`, or `error -28`. Investigate local users, scripts, containers, or automation that executed repeated Btrfs qgroup commands, especially on filesystems that were close to full. Also check for operational symptoms around the same time: unexpected read-only Btrfs remounts, failed writes, failed unmounts, application I/O errors, or service restarts. Because the vulnerability produces denial-of-service behavior rather than a unique payload, detection should focus on correlation between quota/qgroup activity and Btrfs kernel errors.

  • BTRFS: Transaction aborted (error -28)
  • BTRFS error
  • failed to run delayed ref
  • btrfs_run_delayed_refs
  • btrfs_commit_transaction
  • WARNING: fs/btrfs/extent-tree.c
  • error -28
  • ENOSPC
  • remounting filesystem read-only
  • btrfs quota enable
  • btrfs qgroup create
  • btrfs qgroup assign
  • btrfs qgroup destroy
  • btrfs qgroup show
  • /var/log/kern.log
  • /var/log/syslog
  • /var/log/messages
  • journalctl -k
  • Comm: umount

What your security team should do

  • Inventory Linux systems using Btrfs, especially those with quotas/qgroups enabled or exposed to local users, containers, CI jobs, or shared workloads.
  • Prioritize kernel updates for multi-user, shared hosting, storage, and container hosts where local users can influence Btrfs quota operations.
  • Restrict Btrfs administrative capabilities to trusted administrators only; review sudo rules, container privileges, and any automation that can run `btrfs quota` or `btrfs qgroup` commands.
  • Add monitoring for Btrfs transaction aborts, delayed-reference failures, read-only remounts, and ENOSPC conditions in kernel logs.
  • Ensure Btrfs filesystems maintain sufficient free space and metadata headroom until patched.
  • Review recent logs for suspicious bursts of qgroup creation or quota enablement followed by Btrfs errors.
  • Document recovery procedures for affected Btrfs filesystems, including remount, scrub/check guidance from the OS vendor, service restoration, and rollback from backups if needed.

The record

In the Linux kernel, the following vulnerability has been resolved: btrfs: reserve enough transaction items for qgroup ioctls Currently our qgroup ioctls don't reserve any space, they just do a transaction join, which does not reserve any space, neither for the quota tree updates nor for the delayed refs generated when updating the quota tree. The quota root uses the global block reserve, which is fine most of the time since we don't expect a lot of updates to the quota root, or to be too close to -ENOSPC such that other critical metadata updates need to resort to the global reserve. However this is not optimal, as not reserving proper space may result in a transaction abort due to not reserving space for delayed refs and then abusing the use of the global block reserve. For example, the following reproducer (which is unlikely to model any real world use case, but just to illustrate the problem), triggers such a transaction abort due to -ENOSPC when running delayed refs: $ cat test.sh #!/bin/bash DEV=/dev/nullb0 MNT=/mnt/nullb0 umount $DEV &> /dev/null # Limit device to 1G so that it's much faster to reproduce the issue. mkfs.btrfs -f -b 1G $DEV mount -o commit=600 $DEV $MNT fallocate -l 800M $MNT/filler btrfs quota enable $MNT for ((i = 1; i <= 400000; i++)); do btrfs qgroup create 1/$i $MNT done umount $MNT When running this, we can see in dmesg/syslog that a transaction abort happened: [436.490] BTRFS error (device nullb0): failed to run delayed ref for logical 30408704 num_bytes 16384 type 176 action 1 ref_mod 1: -28 [436.493] ------------[ cut here ]------------ [436.494] BTRFS: Transaction aborted (error -28) [436.495] WARNING: fs/btrfs/extent-tree.c:2247 at btrfs_run_delayed_refs+0xd9/0x110 [btrfs], CPU#4: umount/2495372 [436.497] Modules linked in: btrfs loop (...) [436.508] CPU: 4 UID: 0 PID: 2495372 Comm: umount Tainted: G W 6.19.0-rc8-btrfs-next-225+ #1 PREEMPT(full) [436.510] Tainted: [W]=WARN [436.511] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014 [436.513] RIP: 0010:btrfs_run_delayed_refs+0xdf/0x110 [btrfs] [436.514] Code: 0f 82 ea (...) [436.518] RSP: 0018:ffffd511850b7d78 EFLAGS: 00010292 [436.519] RAX: 00000000ffffffe4 RBX: ffff8f120dad37e0 RCX: 0000000002040001 [436.520] RDX: 0000000000000002 RSI: 00000000ffffffe4 RDI: ffffffffc090fd80 [436.522] RBP: 0000000000000000 R08: 0000000000000001 R09: ffffffffc04d1867 [436.523] R10: ffff8f18dc1fffa8 R11: 0000000000000003 R12: ffff8f173aa89400 [436.524] R13: 0000000000000000 R14: ffff8f173aa89400 R15: 0000000000000000 [436.526] FS: 00007fe59045d840(0000) GS:ffff8f192e22e000(0000) knlGS:0000000000000000 [436.527] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [436.528] CR2: 00007fe5905ff2b0 CR3: 000000060710a002 CR4: 0000000000370ef0 [436.530] Call Trace: [436.530] <TASK> [436.530] btrfs_commit_transaction+0x73/0xc00 [btrfs] [436.531] ? btrfs_attach_transaction_barrier+0x1e/0x70 [btrfs] [436.532] sync_filesystem+0x7a/0x90 [436.533] generic_shutdown_super+0x28/0x180 [436.533] kill_anon_super+0x12/0x40 [436.534] btrfs_kill_super+0x12/0x20 [btrfs] [436.534] deactivate_locked_super+0x2f/0xb0 [436.534] cleanup_mnt+0xea/0x180 [436.535] task_work_run+0x58/0xa0 [436.535] exit_to_user_mode_loop+0xed/0x480 [436.536] ? __x64_sys_umount+0x68/0x80 [436.536] do_syscall_64+0x2a5/0xf20 [436.537] entry_SYSCALL_64_after_hwframe+0x76/0x7e [436.537] RIP: 0033:0x7fe5906b6217 [436.538] Code: 0d 00 f7 (...) [436.540] RSP: 002b:00007ffcd87a61f8 EFLAGS: 00000246 ORIG_RAX: 00000000000000a6 [436.541] RAX: 0000000000000000 RBX: 00005618b9ecadc8 RCX: 00007fe5906b6217 [436.541] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00005618b9ecb100 [436.542] RBP: 0000000000000000 R08: 00007ffcd87a4fe0 R09: 00000000ffffffff [436.544] R10: 0000000000000103 R11: ---truncated---

Affected packages

Ecosystem Package Introduced Fixed