In the Linux kernel, the following vulnerability has been resolved:
btrfs: fix race in read_extent_buffer_pages()
There are reports from tree-checker that detects corrupted nodes, without any obvious pattern so possibly an overwrite in memory. After some debugging it turns out there's a race when reading an extent buffer the uptodate status can be missed.
To prevent concurrent reads for the same extent buffer, read_extent_buffer_pages() performs these checks:
/* (1) */ if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) return 0;
/* (2) */ if (test_and_set_bit(EXTENT_BUFFER_READING, &eb->bflags)) goto done;
At this point, it seems safe to start the actual read operation. Once that completes, end_bbio_meta_read() does
/* (3) */ set_extent_buffer_uptodate(eb);
/* (4) */ clear_bit(EXTENT_BUFFER_READING, &eb->bflags);
Normally, this is enough to ensure only one read happens, and all other callers wait for it to finish before returning. Unfortunately, there is a racey interleaving:
Thread A | Thread B | Thread C ---------+----------+--------- (1) | | | (1) | (2) | | (3) | | (4) | | | (2) | | | (1)
When this happens, thread B kicks of an unnecessary read. Worse, thread C will see UPTODATE set and return immediately, while the read from thread B is still in progress. This race could result in tree-checker errors like this as the extent buffer is concurrently modified:
BTRFS critical (device dm-0): corrupted node, root=256 block=8550954455682405139 owner mismatch, have 11858205567642294356 expect [256, 18446744073709551360]
Fix it by testing UPTODATE again after setting the READING bit, and if it's been set, skip the unnecessary read.
[ minor update of changelog ]
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux | Jul 27, 2026 | Jul 27, 2026 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | May 17, 2024 |
| Ubuntu | — | Upgrade linux-image-gcpUpgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-oracleUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-gkeUpgrade linux-image-oem-24.04aUpgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-virtualUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-kvmUpgrade linux-image-awsUpgrade linux-image-generic-lpaeUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-raspiUpgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-lowlatency-64kUpgrade linux-image-ibm-classicUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1008-azureUpgrade linux-image-lowlatencyUpgrade linux-image-genericUpgrade linux-image-oracle-64kUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-generic-64kUpgrade linux-image-azureUpgrade linux-image-ibmUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-generic-hwe-24.04 | Jul 1, 2024 | May 17, 2024 |
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