In the Linux kernel, the following vulnerability has been resolved:
btrfs: only release the dirty pages io tree after successful writes
[WARNING] With extra warning on dirty extent buffers at umount (aka, the next patch in the series), test case generic/388 can trigger the following warning about dirty extent buffers at unmount time:
BTRFS critical (device dm-2 state E): emergency shutdown BTRFS error (device dm-2 state E): error while writing out transaction: -30 BTRFS warning (device dm-2 state E): Skipping commit of aborted transaction. BTRFS error (device dm-2 state EA): Transaction 9 aborted (error -30) BTRFS: error (device dm-2 state EA) in cleanup_transaction:2068: errno=-30 Readonly filesystem BTRFS info (device dm-2 state EA): forced readonly BTRFS info (device dm-2 state EA): last unmount of filesystem 4fbf2e15-f941-49a0-bc7c-716315d2777c ------------[ cut here ]------------ WARNING: disk-io.c:3311 at invalidate_and_check_btree_folios+0xfd/0x1ca [btrfs], CPU#8: umount/914368 CPU: 8 UID: 0 PID: 914368 Comm: umount Tainted: G OE 7.1.0-rc1-custom+ #372 PREEMPT(full) 2de38db8d1deae71fde295430a0ff3ab98ccf596 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS unknown 02/02/2022 RIP: 0010:invalidate_and_check_btree_folios+0xfd/0x1ca [btrfs] Call Trace: <TASK> close_ctree+0x52e/0x574 [btrfs d2f0b1cd330d1287e7a9919d112eadfc0e914efd] generic_shutdown_super+0x89/0x1a0 kill_anon_super+0x16/0x40 btrfs_kill_super+0x16/0x20 [btrfs d2f0b1cd330d1287e7a9919d112eadfc0e914efd] deactivate_locked_super+0x2d/0xb0 cleanup_mnt+0xdc/0x140 task_work_run+0x5a/0xa0 exit_to_user_mode_loop+0x123/0x4b0 do_syscall_64+0x243/0x7c0 entry_SYSCALL_64_after_hwframe+0x4b/0x53 </TASK> ---[ end trace 0000000000000000 ]--- BTRFS warning (device dm-2 state EA): unable to release extent buffer 30539776 owner 9 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30621696 owner 257 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30638080 owner 258 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30654464 owner 7 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30703616 owner 2 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30720000 owner 10 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30736384 owner 4 gen 9 refs 2 flags 0x7 BTRFS warning (device dm-2 state EA): unable to release extent buffer 30752768 owner 11 gen 9 refs 2 flags 0x7
I'm using a stripped down version, which seems to trigger the warning more reliably:
_fsstress_pid="" workload() { dmesg -C mkfs.btrfs -f -K $dev > /dev/null echo 1 > /sys/kernel/debug/clear_warn_once mount $dev $mnt $fsstress -w -n 1024 -p 4 -d $mnt & _fsstress_pid=$! sleep 0 $godown $mnt pkill --echo -PIPE fsstress > /dev/null wait $_fsstress_pid unset _fsstress_pid umount $mnt
if dmesg | grep -q "WARNING"; then fail fi }
for (( i = 0; i < $runtime; i++ )); do echo "=== $i/$runtime ===" workload done
[CAUSE] Inside btrfs_write_and_wait_transaction(), we first try to write all dirty ebs, then wait for them to finish.
After that we call btrfs_extent_io_tree_release() to free all extent states from dirty_pages io tree.
However if we hit an error from btrfs_write_marked_extent(), then we still call btrfs_extent_io_tree_release() to clear that dirty_pages io tree, which may contain dirty records that we haven't yet submitted.
Furthermore, the later transaction cleanup path will utilize that dirty_pages io tree to properly cleanup those dirty ebs, but since it's already empty, no dirty ebs are properly cleaned up, thus will later trigger the warnings inside invalidate_btree_folios(). ---truncated---
CVSS Details
- CVSS 3.1 Base Score: 7.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade kernel6.18-modules-extra-commonUpgrade perf6.18Upgrade bpftool6.18Upgrade kernel6.18-debuginfo-common-x86_64Upgrade kernel-livepatch-6.18.33-63.124Upgrade python3-perf6.18-debuginfoUpgrade python3-perf6.18Upgrade kernel6.18-tools-debuginfoUpgrade kernel6.18-develUpgrade kernel6.18-tools-develUpgrade kernel6.18-modules-extraUpgrade kernel6.18-toolsUpgrade kernel6.18Upgrade perf6.18-debuginfoUpgrade kernel6.18-debuginfo-common-aarch64Upgrade kernel6.18-debuginfoUpgrade kernel6.18-headersUpgrade bpftool6.18-debuginfo | Jul 13, 2026 | Jun 26, 2026 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Jun 26, 2026 |
| Ubuntu | — | Upgrade linux-image-virtualUpgrade linux-image-7.0.0-1008-gcp-64kUpgrade linux-image-oem-24.04aUpgrade linux-image-gcpUpgrade linux-image-oem-24.04Upgrade linux-image-genericUpgrade linux-image-6.8.0-1035-nvidia-tegraUpgrade linux-image-6.8.0-1035-nvidia-tegra-rtUpgrade linux-image-7.0.0-1010-ibmUpgrade linux-image-generic-64k-7.0Upgrade linux-image-nvidia-bos-7.0Upgrade linux-image-7.0.0-1008-oracleUpgrade linux-image-gkeUpgrade linux-image-7.0.0-1003-gke-64kUpgrade linux-image-gke-hwe-26.04Upgrade linux-image-aws-64kUpgrade linux-image-7.0.0-1009-aws-64kUpgrade linux-image-nvidiaUpgrade linux-image-nvidia-hwe-26.04Upgrade linux-image-oracle-7.0Upgrade linux-image-generic-hwe-26.04Upgrade linux-image-nvidia-64kUpgrade linux-image-nvidia-bos-64kUpgrade linux-image-nvidia-tegraUpgrade linux-image-ibm-7.0Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-nvidia-64k-hwe-26.04Upgrade linux-image-oem-24.04cUpgrade linux-image-realtime-hwe-26.04Upgrade linux-image-7.0.0-1014-azureUpgrade linux-image-realtime-64k-7.0Upgrade linux-image-7.0.0-1016-nvidia-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-7.0.0-1011-gcpUpgrade linux-image-realtime-64k-hwe-26.04Upgrade linux-image-7.0.0-1003-gkeUpgrade linux-image-gke-64k-hwe-26.04Upgrade linux-image-7.0.0-1009-azure-fdeUpgrade linux-image-oem-7.0Upgrade linux-image-azure-7.0Upgrade linux-image-7.0.0-1009-awsUpgrade linux-image-oracle-64kUpgrade linux-image-virtual-7.0Upgrade linux-image-generic-64kUpgrade linux-image-raspi-realtimeUpgrade linux-image-oracle-64k-7.0Upgrade linux-image-ibmUpgrade linux-image-oem-24.04dUpgrade linux-image-generic-7.0Upgrade linux-image-gcp-64kUpgrade linux-image-awsUpgrade linux-image-7.0.0-28-realtime-64kUpgrade linux-image-7.0.0-28-genericUpgrade linux-image-7.0.0-1011-gcp-64kUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-7.0.0-28-realtimeUpgrade linux-image-generic-64k-hwe-26.04Upgrade linux-image-aws-7.0Upgrade linux-image-gcp-64k-7.0Upgrade linux-image-nvidia-64k-7.0Upgrade linux-image-gke-64k-7.0Upgrade linux-image-7.0.0-2016-nvidia-bosUpgrade linux-image-7.0.0-1016-nvidiaUpgrade linux-image-7.0.0-1008-gcpUpgrade linux-image-oem-24.04bUpgrade linux-image-nvidia-bos-64k-7.0Upgrade linux-image-virtual-hwe-26.04Upgrade linux-image-7.0.0-28-generic-64kUpgrade linux-image-7.0.0-2016-nvidia-bos-64kUpgrade linux-image-7.0.0-1008-oracle-64kUpgrade linux-image-realtimeUpgrade linux-image-raspi-7.0Upgrade linux-image-oracleUpgrade linux-image-7.0.0-1015-raspiUpgrade linux-image-7.0.0-1010-azureUpgrade linux-image-realtime-7.0Upgrade linux-image-raspi-realtime-7.0Upgrade linux-image-oem-26.04Upgrade linux-image-nvidia-7.0Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-azure-fdeUpgrade linux-image-azureUpgrade linux-image-realtime-64kUpgrade linux-image-azure-fde-7.0Upgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-gcp-7.0Upgrade linux-image-7.0.0-1015-raspi-realtimeUpgrade linux-image-oem-26.04aUpgrade linux-image-gke-64kUpgrade linux-image-7.0.0-1009-oemUpgrade linux-image-raspiUpgrade linux-image-nvidia-bosUpgrade linux-image-gke-7.0Upgrade linux-image-aws-64k-7.0 | Jul 20, 2026 | Jun 26, 2026 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub