A janitor empties the trash bin before the cleanup crew arrives, then everyone wonders why the floor is still dirty
The btrfs transaction commit path calls btrfs_extent_io_tree_release() on the dirty_pages io tree even when btrfs_write_marked_extent() has just failed. The later transaction-abort cleanup expects to walk that same tree to release dirty extent buffers — but it's already been emptied — so the buffers leak and invalidate_btree_folios() fires warnings. The end state on a real box is a forced read-only remount of the affected filesystem after an underlying write error (bad block, failing disk, ENOSPC at the device layer, dm-crypt failure, etc.). Affected: mainline btrfs prior to 6.18.33 and 7.0.10; fixed in 6.18.33, 7.0.10, and 7.1.
Vendor severity is HIGH 7.5 with AV:N/AC:L/PR:N/UI:N/A:H — that vector is wrong. Nothing about this bug is network-reachable, and no unauthenticated remote attacker can trigger a btrfs write failure on your kernel's metadata path. This is a kernel-internal error-handling bug that surfaces *only after* the storage layer has already returned a write error. The realistic worst case is a noisy WARN_ON and a filesystem flipped read-only — annoying for uptime, but it requires a pre-existing I/O fault you didn't cause. The auto-generated kernel.org CVE scoring boilerplate is overstating impact, as it does for nearly every btrfs CVE filed this cycle.
3 steps from start to impact.
Underlying storage returns a write error
btrfs_write_marked_extent() to fail mid-transaction. Without a real write fault, this code path is never entered. There is no network-reachable trigger.- Local btrfs filesystem mounted rw
- Underlying block device returns a write error during a metadata commit
- Most production btrfs deployments run on healthy RAID/LVM — write errors are rare events, not attacker-triggerable
- No userspace primitive (syscall, ioctl, network packet) reliably forces this failure without root or hardware control
Premature io_tree release
btrfs_write_and_wait_transaction() unconditionally calls btrfs_extent_io_tree_release() on the dirty_pages tree, even though the failed write left unsubmitted records. The tree is now empty; the abort path can no longer walk it. This is purely a kernel-internal data structure mishandling.- Step 1 occurred
- Vulnerable kernel < 6.18.33 or < 7.0.10
- Triggering this exactly takes a narrow timing window inside a transaction commit
Filesystem flips read-only, leaked extent buffers logged
- Steps 1–2 succeeded
- Read-only remount is the safe failure mode — exactly what btrfs is designed to do
- Recovery is
umount+btrfs check+ remount; no data corruption beyond the failed transaction
mount state changes.The supporting signals.
| In-the-wild exploitation | None observed. No public PoC, no malware family abuses this, no incident reports. |
|---|---|
| Proof-of-concept | No public PoC. The reproducer is essentially *inject a write error during a metadata commit* — done internally via dm-flakey or dm-error by the btrfs maintainers. |
| EPSS | 0.00432 (~0.4%) — extremely low predicted exploitation. |
| KEV status | Not listed. CISA has not added this CVE. |
| CVSS vector (as published) | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — the AV:N is incorrect; realistic vector is AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L. |
| Affected versions | Linux mainline btrfs before 6.18.33 and before 7.0.10. |
| Fixed versions | 6.18.33, 7.0.10, 7.1. Distro backports rolling out (RHEL/Alma/Rocky/Ubuntu/SUSE) via normal kernel errata channels. |
| Exposure / scanning | Not internet-reachable; GreyNoise/Shodan/Censys irrelevant. Affected population = hosts running btrfs root or btrfs data volumes on vulnerable kernels. |
| Disclosed | 2026-06-26 via kernel.org's automated CVE assignment program. |
| Reporter | btrfs maintainer team (Qu Wenruo / Josef Bacik upstream); CVE auto-allocated by kernel.org CNA. |
noisgate verdict.
The decisive factor is that this is a local kernel error-handling bug with no remote trigger and no confidentiality/integrity impact — the vendor's AV:N is a scoring artifact of the kernel.org auto-CNA pipeline. Worst-case real-world outcome is a read-only remount after a pre-existing storage fault, which is btrfs's intended fail-safe behavior, not an attacker primitive.
Why this verdict
- Vector is wrong: the published
AV:Ndoesn't survive inspection — the code path requires a block-layer write failure during a btrfs metadata commit, which has no network reach. - Impact ceiling is a read-only remount, which is btrfs's *designed* safety response to a write fault; the bug only adds noisy WARN_ONs and leaked extent buffers, not corruption or RCE.
- Role multiplier: even on high-value roles (btrfs-backed CI artifact store, btrfs root on a hypervisor, Synology/SUSE storage appliances) the chain still ends in *one filesystem goes RO until reboot* — no domain takeover, no tenant crossover, no supply-chain pivot. Floor stays LOW.
- EPSS 0.00432, no KEV, no PoC, no telemetry of in-the-wild abuse — every external signal agrees this is hygiene, not fire.
Why not higher?
MEDIUM would imply a credible local DoS primitive an unprivileged user can fire on demand. There isn't one — you need to either be root or to engineer a block-layer fault you already have privileges to inject. HIGH is off the table once AV:N is corrected to AV:L.
Why not lower?
Not IGNORE because the bug is real, ships in shipping kernels, and a flaky disk in production *will* land hosts in unscheduled read-only — operationally painful even if not security-impactful. Patch in the normal kernel-errata cadence.
What to do — in priority order.
- Roll the bug into your next scheduled kernel-errata cycle — Verdict is LOW — no mitigation SLA applies. Pick up 6.18.33 / 7.0.10 or your distro's backport during the standard 365-day remediation window; no out-of-band action required.
- Audit btrfs hosts for storage health — Because the bug only triggers after an underlying write error, healthy storage is itself a compensating control. Review SMART, dm-multipath logs, and thin-pool fill rates on btrfs hosts during your normal weekly ops review.
- Alert on involuntary read-only remounts — Add a journald/Falco/host-agent rule for
BTRFS: errorandremount-roso an event surfaces immediately if a vulnerable host trips. Deploy alongside your standard observability rollout — no special timeline. - Snapshot/backup posture check — Ensure
btrfs send/snapshot rotation and off-host backups are current for any btrfs volume holding regulated or high-value data — the fail-safe is RO, but recovery still depends on a recent backup ifbtrfs check --repairis needed.
- Network ACLs / WAF / segmentation — irrelevant, this bug has no network surface despite the published
AV:N. - Disabling SMB/NFS/iSCSI re-exports of btrfs volumes — doesn't help; the trigger is local block-layer I/O failure, not the export protocol.
- EDR / kernel-mode AV — they cannot prevent a kernel data-structure mishandling inside the transaction commit path.
Crowdsourced verification payload.
Run on each Linux host with btrfs mounts (root or local sudo required). Example: sudo ./check-cve-2026-53284.sh. Returns VULNERABLE, PATCHED, NOT_APPLICABLE (no btrfs), or UNKNOWN.
#!/usr/bin/env bash
# check-cve-2026-53284.sh — btrfs dirty_pages io_tree release
# Run as root on a Linux host. Exit codes: 0=PATCHED/NA, 1=VULNERABLE, 2=UNKNOWN
set -u
if ! command -v uname >/dev/null 2>&1; then
echo UNKNOWN; exit 2
fi
# 1. Is btrfs actually in use?
if ! grep -qw btrfs /proc/filesystems 2>/dev/null && ! mount | grep -qw btrfs; then
echo NOT_APPLICABLE
exit 0
fi
KREL=$(uname -r)
# Strip distro suffix, keep numeric x.y.z
NUM=$(echo "$KREL" | grep -oE '^[0-9]+\.[0-9]+(\.[0-9]+)?' | head -1)
IFS=. read -r MAJ MIN PATCH <<<"$NUM"
PATCH=${PATCH:-0}
vuln=0
case "$MAJ" in
6)
if [ "$MIN" -lt 18 ]; then vuln=1
elif [ "$MIN" -eq 18 ] && [ "$PATCH" -lt 33 ]; then vuln=1
fi
;;
7)
if [ "$MIN" -eq 0 ] && [ "$PATCH" -lt 10 ]; then vuln=1
fi
# 7.1+ is fixed
;;
*)
if [ "$MAJ" -lt 6 ]; then vuln=1; fi
;;
esac
# Distro backport hint: check changelog if available
if command -v rpm >/dev/null 2>&1; then
if rpm -q --changelog kernel 2>/dev/null | grep -qi 'CVE-2026-53284'; then vuln=0; fi
elif command -v dpkg >/dev/null 2>&1; then
if dpkg -s linux-image-"$KREL" 2>/dev/null | grep -qi 'CVE-2026-53284'; then vuln=0; fi
fi
if [ "$vuln" -eq 1 ]; then
echo "VULNERABLE (kernel $KREL, btrfs in use)"
exit 1
fi
echo "PATCHED (kernel $KREL)"
exit 0
If you remember one thing.
remount-ro events so an unlucky host on a flaky disk doesn't fail silently. Skip any out-of-cycle change windows.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.