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 ]
| 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-oem-24.04aUpgrade linux-image-6.8.0-1009-awsUpgrade linux-image-gkeUpgrade linux-image-kvmUpgrade linux-image-6.8.0-35-lowlatency-64kUpgrade linux-image-6.8.0-1006-oemUpgrade linux-image-6.8.0-1004-gkeUpgrade linux-image-6.8.0-1006-oracle-64kUpgrade linux-image-virtualUpgrade linux-image-oem-24.04Upgrade linux-image-6.8.0-1006-oracleUpgrade linux-image-6.8.0-1008-azure-fdeUpgrade linux-image-oracleUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-generic-lpaeUpgrade linux-image-gcpUpgrade linux-image-awsUpgrade linux-image-6.8.0-1008-gcpUpgrade linux-image-azureUpgrade linux-image-ibmUpgrade linux-image-6.8.0-35-genericUpgrade linux-image-lowlatencyUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-35-generic-64kUpgrade linux-image-generic-64kUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-1005-raspiUpgrade linux-image-6.8.0-1008-azureUpgrade linux-image-raspiUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1006-ibmUpgrade linux-image-ibm-classicUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-6.8.0-35-lowlatencyUpgrade linux-image-genericUpgrade linux-image-oracle-64k | Jul 1, 2024 | May 17, 2024 |
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