In the Linux kernel, the following vulnerability has been resolved:
btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
From the memory-barriers.txt document regarding memory barrier ordering guarantees:
(*) These guarantees do not apply to bitfields, because compilers often generate code to modify these using non-atomic read-modify-write sequences. Do not attempt to use bitfields to synchronize parallel algorithms.
(*) Even in cases where bitfields are protected by locks, all fields in a given bitfield must be protected by one lock. If two fields in a given bitfield are protected by different locks, the compiler's non-atomic read-modify-write sequences can cause an update to one field to corrupt the value of an adjacent field.
btrfs_space_info has a bitfield sharing an underlying word consisting of the fields full, chunk_alloc, and flush:
struct btrfs_space_info { struct btrfs_fs_info * fs_info; /* 0 8 */ struct btrfs_space_info * parent; /* 8 8 */ ... int clamp; /* 172 4 */ unsigned int full:1; /* 176: 0 4 */ unsigned int chunk_alloc:1; /* 176: 1 4 */ unsigned int flush:1; /* 176: 2 4 */ ...
Therefore, to be safe from parallel read-modify-writes losing a write to one of the bitfield members protected by a lock, all writes to all the bitfields must use the lock. They almost universally do, except for btrfs_clear_space_info_full() which iterates over the space_infos and writes out found->full = 0 without a lock.
Imagine that we have one thread completing a transaction in which we finished deleting a block_group and are thus calling btrfs_clear_space_info_full() while simultaneously the data reclaim ticket infrastructure is running do_async_reclaim_data_space():
T1 T2 btrfs_commit_transaction btrfs_clear_space_info_full data_sinfo->full = 0 READ: full:0, chunk_alloc:0, flush:1 do_async_reclaim_data_space(data_sinfo) spin_lock(&space_info->lock); if(list_empty(tickets)) space_info->flush = 0; READ: full: 0, chunk_alloc:0, flush:1 MOD/WRITE: full: 0, chunk_alloc:0, flush:0 spin_unlock(&space_info->lock); return; MOD/WRITE: full:0, chunk_alloc:0, flush:1
and now data_sinfo->flush is 1 but the reclaim worker has exited. This breaks the invariant that flush is 0 iff there is no work queued or running. Once this invariant is violated, future allocations that go into __reserve_bytes() will add tickets to space_info->tickets but will see space_info->flush is set to 1 and not queue the work. After this, they will block forever on the resulting ticket, as it is now impossible to kick the worker again.
I also confirmed by looking at the assembly of the affected kernel that it is doing RMW operations. For example, to set the flush (3rd) bit to 0, the assembly is: andb $0xfb,0x60(%rbx) and similarly for setting the full (1st) bit to 0: andb $0xfe,-0x20(%rax)
So I think this is really a bug on practical systems. I have observed a number of systems in this exact state, but am currently unable to reproduce it.
Rather than leaving this footgun lying around for the future, take advantage of the fact that there is room in the struct anyway, and that it is already quite large and simply change the three bitfield members to bools. This avoids writes to space_info->full having any effect on ---truncated---
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernelUpgrade perf-debuginfoUpgrade kernel-headersUpgrade kernel-toolsUpgrade kernel-tools-develUpgrade python-perfUpgrade python-perf-debuginfoUpgrade perfUpgrade bpftool-debuginfoUpgrade bpftoolUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-debuginfoUpgrade kernel-livepatch-5.15.201-140.219Upgrade kernel-debuginfoUpgrade kernel-develUpgrade kernel-debuginfo-common-aarch64 | May 20, 2026 | May 20, 2026 |
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Mar 16, 2026 | Mar 16, 2026 |
| Ubuntu | — | Upgrade linux-image-intel-iotgUpgrade linux-image-lowlatency-5.15Upgrade linux-image-6.8.1-1051-realtimeUpgrade linux-image-azure-6.8Upgrade linux-image-gcp-64kUpgrade linux-image-6.8.0-1056-raspiUpgrade linux-image-6.8.0-2045-raspi-realtimeUpgrade linux-image-azure-fips-5.15Upgrade linux-image-nvidia-6.8Upgrade linux-image-6.8.0-1024-nvidia-tegra-rtUpgrade linux-image-6.8.0-1032-xilinxUpgrade linux-image-6.8.0-1055-awsUpgrade linux-image-gcp-64k-6.8Upgrade linux-image-fipsUpgrade linux-image-6.8.0-117-generic-64kUpgrade linux-image-intel-iot-realtimeUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-generic-lpae-5.15Upgrade linux-image-nvidia-tegra-igx-5.15Upgrade linux-image-oem-24.04dUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-gcp-fips-6.8Upgrade linux-image-realtime-5.15Upgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-lowlatency-64kUpgrade linux-image-aws-64k-lts-22.04Upgrade linux-image-realtime-6.8.1Upgrade linux-image-realtime-hwe-22.04Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-6.8.0-1054-nvidia-lowlatencyUpgrade linux-image-5.15.0-1117-azure-fipsUpgrade linux-image-6.8.0-116-fipsUpgrade linux-image-5.15.0-1112-aws-64kUpgrade linux-image-generic-64kUpgrade linux-image-lowlatencyUpgrade linux-image-generic-6.17Upgrade linux-image-intel-iotg-5.15Upgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-gke-64k-6.8Upgrade linux-image-xilinx-6.8Upgrade linux-image-gke-6.8Upgrade linux-image-oem-24.04Upgrade linux-image-oem-20.04Upgrade linux-image-raspi-realtimeUpgrade linux-image-5.15.0-1106-raspiUpgrade linux-image-5.15.0-1107-nvidiaUpgrade linux-image-gke-5.15Upgrade linux-image-6.8.0-117-lowlatency-64kUpgrade linux-image-aws-6.17Upgrade linux-image-5.15.0-1112-gcp-fipsUpgrade linux-image-6.8.0-1055-aws-64kUpgrade linux-image-gcpUpgrade linux-image-generic-lpaeUpgrade linux-image-nvidia-tegra-rt-5.15Upgrade linux-image-oracle-5.15Upgrade linux-image-nvidia-64kUpgrade linux-image-raspi-6.17Upgrade linux-image-5.15.0-1112-aws-fipsUpgrade linux-image-5.15.0-1117-azure-fdeUpgrade linux-image-kvm-5.15Upgrade linux-image-nvidia-5.15Upgrade linux-image-intelUpgrade linux-image-raspi-realtime-6.8Upgrade linux-image-genericUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-xilinxUpgrade linux-image-6.17.0-1009-oracleUpgrade linux-image-aws-64kUpgrade linux-image-gkeopUpgrade linux-image-ibmUpgrade linux-image-raspiUpgrade linux-image-nvidia-tegraUpgrade linux-image-raspi-5.15Upgrade linux-image-6.17.0-1009-aws-64kUpgrade linux-image-azure-6.17Upgrade linux-image-5.15.0-186-generic-lpaeUpgrade linux-image-oem-24.04aUpgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-realtime-hwe-24.04Upgrade linux-image-6.8.0-1056-azureUpgrade linux-image-5.15.0-1112-gcpUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-oem-20.04cUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-oracle-64kUpgrade linux-image-azure-5.15Upgrade linux-image-azure-lts-22.04Upgrade linux-image-gkeUpgrade linux-image-realtime-6.17Upgrade linux-image-nvidia-tegra-igx-rtUpgrade linux-image-nvidiaUpgrade linux-image-nvidia-tegra-5.15Upgrade linux-image-6.8.0-1059-azure-fipsUpgrade linux-image-gkeop-6.8Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-aws-6.8Upgrade linux-image-5.15.0-1106-ibmUpgrade linux-image-fips-5.15Upgrade linux-image-6.8.0-1054-nvidia-64kUpgrade linux-image-5.15.0-1064-nvidia-tegraUpgrade linux-image-6.8.0-1054-gkeUpgrade linux-image-5.15.0-1075-xilinx-zynqmpUpgrade linux-image-oem-20.04bUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.17.0-1010-azureUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-azureUpgrade linux-image-ibm-5.15Upgrade linux-image-raspi-6.8Upgrade linux-image-virtual-6.17Upgrade linux-image-6.17.0-1017-oemUpgrade linux-image-6.8.0-1054-nvidiaUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-5.15.0-1109-oracleUpgrade linux-image-realtimeUpgrade linux-image-5.15.0-184-lowlatencyUpgrade linux-image-5.15.0-1112-awsUpgrade linux-image-5.15.0-1053-nvidia-tegra-igx-rtUpgrade linux-image-nvidia-tegra-igx-rt-5.15Upgrade linux-image-generic-5.15Upgrade linux-image-oracle-lts-22.04Upgrade linux-image-aws-64k-5.15Upgrade linux-image-gcp-fips-5.15Upgrade linux-image-5.15.0-186-genericUpgrade linux-image-6.8.0-1055-aws-fipsUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-gke-64kUpgrade linux-image-generic-64k-5.15Upgrade linux-image-azure-lts-24.04Upgrade linux-image-aws-fipsUpgrade linux-image-6.8.0-1054-gke-64kUpgrade linux-image-6.17.0-1009-awsUpgrade linux-image-5.15.0-1053-nvidia-tegra-igxUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-azure-fips-6.8Upgrade linux-image-kvmUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-ibm-classicUpgrade linux-image-aws-64k-6.17Upgrade linux-image-azure-fde-5.15Upgrade linux-image-aws-lts-22.04Upgrade linux-image-oem-24.04bUpgrade linux-image-azure-fipsUpgrade linux-image-azure-cvmUpgrade linux-image-aws-fips-5.15Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-6.8.0-1024-nvidia-tegraUpgrade linux-image-6.17.0-19-genericUpgrade linux-image-6.17.0-1009-gcpUpgrade linux-image-aws-fips-6.8Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-lowlatency-64k-5.15Upgrade linux-image-6.8.0-1054-nvidia-lowlatency-64kUpgrade linux-image-oracle-6.17Upgrade linux-image-gkeop-5.15Upgrade linux-image-generic-hwe-20.04Upgrade linux-image-azure-fdeUpgrade linux-image-aws-64k-6.8Upgrade linux-image-6.8.0-1058-gcpUpgrade linux-image-5.15.0-1111-realtimeUpgrade linux-image-5.15.0-1064-nvidia-tegra-rtUpgrade linux-image-6.8.0-1055-ibmUpgrade linux-image-6.17.0-1010-raspiUpgrade linux-image-5.15.0-186-generic-64kUpgrade linux-image-5.15.0-184-lowlatency-64kUpgrade linux-image-5.15.0-1107-nvidia-lowlatencyUpgrade linux-image-raspi-nolpaeUpgrade linux-image-nvidia-tegra-igxUpgrade linux-image-nvidia-lowlatency-5.15Upgrade linux-image-intel-iot-realtime-5.15Upgrade linux-image-gcp-5.15Upgrade linux-image-6.8.0-1058-gcp-fipsUpgrade linux-image-gcp-6.17Upgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-oem-24.04cUpgrade linux-image-oem-20.04dUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-5.15.0-1107-intel-iotgUpgrade linux-image-6.8.0-1059-azureUpgrade linux-image-xilinx-zynqmp-5.15Upgrade linux-image-oracle-64k-6.17Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-lowlatency-6.8Upgrade linux-image-ibm-6.8Upgrade linux-image-generic-64k-6.17Upgrade linux-image-gcp-fipsUpgrade linux-image-fips-6.8Upgrade linux-image-aws-5.15Upgrade linux-image-6.8.0-117-genericUpgrade linux-image-6.8.0-1058-gcp-64kUpgrade linux-image-6.17.0-1009-gcp-64kUpgrade linux-image-6.8.0-117-lowlatencyUpgrade linux-image-oracleUpgrade linux-image-oem-6.17Upgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-6.17.0-19-generic-64kUpgrade linux-image-5.15.0-186-fipsUpgrade linux-image-5.15.0-1117-azureUpgrade linux-image-5.15.0-1095-gkeopUpgrade linux-image-virtual-6.8Upgrade linux-image-awsUpgrade linux-image-gcp-6.8Upgrade linux-image-6.17.0-1008-realtimeUpgrade linux-image-gcp-lts-22.04Upgrade linux-image-gcp-64k-6.17Upgrade linux-image-6.8.0-1041-gkeopUpgrade linux-image-5.15.0-1108-gkeUpgrade linux-image-6.17.0-1009-oracle-64kUpgrade linux-image-aws-lts-24.04Upgrade linux-image-generic-6.8Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-generic-64k-6.8Upgrade linux-image-5.15.0-1104-intel-iot-realtimeUpgrade linux-image-5.15.0-1104-kvmUpgrade linux-image-virtual-5.15Upgrade linux-image-virtual | Mar 17, 2026 | Dec 24, 2025 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | May 27, 2026 | Dec 24, 2025 |
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