btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
Оценка Noroxi
Приоритет: Наблюдать (оценка срочности 22/100)
- В отслеживаемых источниках (CISA KEV, Exploit-DB, Metasploit, Nuclei, GitHub) нет публичного эксплойта или записей об эксплуатации.
- Вероятность эксплуатации в ближайшие 30 дней: 0,18% (FIRST EPSS).
- Может быть вызвана пользователем с локальным доступом к системе. Достаточно учётной записи с низкими привилегиями. Действия пользователя не требуются. Особые условия не требуются; воспроизводится стабильно.
- Исправленная версия: Linux Linux 38e818718c5e04961eea0fa8feff3f100ce40408, 55835646da78e83e7ad06abd741ca8fd8c0b0ea7, 6f442808a86eef847ee10afa9e6459494ed85bb3.
Пока низкий приоритет. Обновитесь до Linux Linux 38e818718c5e04961eea0fa8feff3f100ce40408, 55835646da78e83e7ad06abd741ca8fd8c0b0ea7, 6f442808a86eef847ee10afa9e6459494ed85bb3 или новее.
Формируется автоматически по данным записи: CVSS (NVD и CNA), CISA KEV и SSVC, FIRST EPSS, источники эксплойтов, исправленные версии. Как мы считаем
Первоисточники: NVD · CVE.org · FIRST EPSS
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---
- Опубликовано
- 24 дек. 2025 г.
- Обновлено
- 17 июн. 2026 г.
- EPSS
- 0,1 % · 7-й процентиль
- CWE
- —
Инструменты для отчёта
Оценка срочности
22
Наблюдать
Пока низкий приоритет.
- CVSS
- 22 / 40 · 5.5 / 10
- CISA KEV
- 0 / 30 · Нет в списке
- EPSS
- 0 / 30 · 0,1 %
Узнайте, когда запись изменится
- Нет в KEV: эксплуатация в реальных атаках не зафиксирована
- Публичного эксплойта нет
- Исправление выпущено
Если что-то из этого изменится, сообщим в ежедневной сводке.
У вас WordPress? Проверьте сайт бесплатно в WP Lens
Анализ Noroxi
Что это значит для вашей инфраструктуры?
Оценка выше формируется автоматически по данным записи и не знает вашей среды. Наша команда проверит на ваших системах, действительно ли уязвимость эксплуатируема и какой меры достаточно.
Мы используем этот продукт, нужна помощьЗатронутые системы
Затронута ли ваша версия?
Выберите продукт и введите свою версию. Она сравнивается с диапазонами этой записи прямо в браузере и никуда не отправляется.
| Вендор | Продукт | CPE |
|---|---|---|
| linux | linux kernel | cpe:2.3:o:linux:linux_kernel |
Затронутые версии
Диапазоны версий NVD (для продуктов из каталога). Добавьте продукт в стек с версией, и сопоставление будет по ним.
- linux linux kernel4.8 и новее · до 5.15.201
- linux linux kernel5.16 и новее · до 6.1.164
- linux linux kernel6.2 и новее · до 6.6.124
- linux linux kernel6.7 и новее · до 6.12.68
- linux linux kernel6.13 и новее · до 6.17.13
- linux linux kernel6.18 и новее · до 6.18.2
Версии, заявленные вендором
Диапазоны затронутых версий, заявленные назначающей организацией (Linux). Не зависят от анализа CPE в NVD и обычно опережают его.
Linux Linux
- 4.8затронута
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до b0bb67385480a3aa4c54b139e4f371ddd06b5150затронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до 55835646da78e83e7ad06abd741ca8fd8c0b0ea7затронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до d4a81b8ec639895999275ea2472c69825cd67ea4затронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до db4ae18e1b31e0421fb5312e56aefa382bbc6eceзатронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до 6f442808a86eef847ee10afa9e6459494ed85bb3затронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до 742b90eaf394f0018352c0e10dc89763b2dd5267затронута · git
- 957780eb2788d8c218d539e19a85653f51a96dc1 и новее · до 38e818718c5e04961eea0fa8feff3f100ce40408затронута · git
- до 4.8не затронута · semver
- 5.15.201 и новее · до 5.15.* включительноне затронута · semver
Затронутые пакеты
Данные OSV и GitHub Advisory: экосистема, пакет и диапазон. Сопоставление SBOM использует эту таблицу.
| Экосистема | Пакет | Затронутый диапазон | Исправление |
|---|---|---|---|
| Debian:11 | linux-6.1 | до 6.1.164-1~deb11u1 | 6.1.164-1~deb11u1 |
| Debian:12 | linux | до 6.1.164-1 | 6.1.164-1 |
| Debian:13 | linux | до 6.12.69-1 | 6.12.69-1 |
| Debian:14 | linux | до 6.17.13-1 | 6.17.13-1 |
| openSUSE:Leap 16.0 | dtb-aarch64 | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-64kb | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-azure | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-default | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-default-base | до 6.12.0-160000.38.1.160000.2.22 | 6.12.0-160000.38.1.160000.2.22 |
| openSUSE:Leap 16.0 | kernel-docs | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-kvmsmall | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-obs-build | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-obs-qa | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-rt | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-source | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-syms | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Leap 16.0 | kernel-zfcpdump | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| openSUSE:Tumbleweed | kernel-source | до 6.18.5-1.1 | 6.18.5-1.1 |
| SUSE:Linux Enterprise Server 16.0 | kernel-azure | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| SUSE:Linux Enterprise Server 16.0 | kernel-docs | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| SUSE:Linux Enterprise Server 16.0 | kernel-kvmsmall | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| SUSE:Linux Enterprise Server 16.0 | kernel-obs-qa | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| SUSE:Linux Enterprise Server 16.0 | kernel-zfcpdump | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
| SUSE:Linux Micro 6.2 | kernel-64kb | до 6.12.0-160000.38.1 | 6.12.0-160000.38.1 |
+6
Тот же продукт
linux: все записиДругие записи с наивысшей оценкой для того же основного продукта.
- CVE-2022-0847A flaw was found in the way the "flags" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe KEV89Срочно
- CVE-2021-22555Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACEKEV85Срочно
- CVE-2016-5195Race condition in mm/gup.c in the Linux kernel 2.x through 4.x before 4.8.3 allows local users to gain privileges by leveraging incorrect haKEV83Срочно
Опубликованы до и после этой записи в том же продукте
- ← РаньшеCVE-2025-6833322 дек. 2025 г. · sched_ext: Fix possible deadlock in the deferred_irq_workfn()22Наблюдать
- ← РаньшеCVE-2025-6834023 дек. 2025 г. · team: Move team device type change at the end of team_port_add22Наблюдать
- Позже →CVE-2025-6835124 дек. 2025 г. · exfat: fix refcount leak in exfat_find22Наблюдать
Исправление
На какую версию обновиться
Версии с исправлением по данным вендора, реестров пакетов и Microsoft. Перед обновлением сверьтесь с бюллетенем вендора.
| Продукт / пакет | Исправленная версия | Источник |
|---|---|---|
| Linux Linux | 38e818718c5e04961eea0fa8feff3f100ce40408 | Вендор (CNA) |
| Linux Linux | 55835646da78e83e7ad06abd741ca8fd8c0b0ea7 | Вендор (CNA) |
| Linux Linux | 6f442808a86eef847ee10afa9e6459494ed85bb3 | Вендор (CNA) |
| Linux Linux | 742b90eaf394f0018352c0e10dc89763b2dd5267 | Вендор (CNA) |
| Linux Linux | b0bb67385480a3aa4c54b139e4f371ddd06b5150 | Вендор (CNA) |
| Linux Linux | d4a81b8ec639895999275ea2472c69825cd67ea4 | Вендор (CNA) |
| Linux Linux | db4ae18e1b31e0421fb5312e56aefa382bbc6ece | Вендор (CNA) |
| debian:linux | 6.1.164-1 · Debian:12 | Реестр пакетов (OSV) |
| debian:linux-6.1 | 6.1.164-1~deb11u1 · Debian:11 | Реестр пакетов (OSV) |
| opensuse:dtb-aarch64 | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-64kb | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-azure | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-default | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-default-base | 6.12.0-160000.38.1.160000.2.22 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-docs | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-kvmsmall | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-obs-build | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-obs-qa | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-rt | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| opensuse:kernel-source | 6.18.5-1.1 · openSUSE:Tumbleweed | Реестр пакетов (OSV) |
| opensuse:kernel-syms | 6.12.0-160000.38.1 · openSUSE:Leap 16.0 | Реестр пакетов (OSV) |
| suse:kernel-64kb | 6.12.0-160000.38.1 · SUSE:Linux Micro 6.2 | Реестр пакетов (OSV) |
| suse:kernel-azure | 6.12.0-160000.38.1 · SUSE:Linux Enterprise Server 16.0 | Реестр пакетов (OSV) |
| suse:kernel-default | 6.12.0-160000.38.1 · SUSE:Linux Micro 6.2 | Реестр пакетов (OSV) |
| suse:kernel-default-base | 6.12.0-160000.38.1.160000.2.23 · SUSE:Linux Micro 6.2 | Реестр пакетов (OSV) |
| suse:kernel-docs | 6.12.0-160000.38.1 · SUSE:Linux Enterprise Server 16.0 | Реестр пакетов (OSV) |
| suse:kernel-kvmsmall | 6.12.0-160000.38.1 · SUSE:Linux Enterprise Server 16.0 | Реестр пакетов (OSV) |
| suse:kernel-obs-build | 6.12.0-160000.38.1 · SUSE:Linux Micro Extras 6.2 | Реестр пакетов (OSV) |
| suse:kernel-obs-qa | 6.12.0-160000.38.1 · SUSE:Linux Enterprise Server 16.0 | Реестр пакетов (OSV) |
| suse:kernel-rt | 6.12.0-160000.38.1 · SUSE:Linux Micro 6.2 | Реестр пакетов (OSV) |
+3
Статус эксплойта
Публичный эксплойт неизвестен
Публичный эксплойт пока не обнаружен. Это не значит, что вы в безопасности, лишь что порог чуть выше.
Контекст для исследователя
Для пентестеров и исследователей: профиль атаки, расхождение оценок, хронология, коммиты исправлений, авторы, кандидаты в варианты и цепочки, охват bug bounty. Всё выводится из имеющихся данных; без кода эксплойтов.
Хронология
От публикации до сегодня: proof of concept, модуль Metasploit, CISA KEV и запись об исправлении. Даты — как сообщают источники.
Кроме публикации датированных событий нет.
Ежедневная оценка FIRST EPSS; записываются только изменения от 0,01 (ступенчатый график).
Ссылки на патчи и коммиты
Коммиты, PR и diff среди источников. Отправная точка для patch-diff и поиска вариантов; это исправления, не эксплойты.
Среди источников нет ссылок на коммит или PR.
Авторы
Все исследователиНашедшие, сообщившие и аналитики, названные в записи CNA. Нажмите имя, чтобы увидеть другие записи исследователя.
В записи CNA нет авторов.
Кандидаты в варианты
Тот же продукт, тот же класс уязвимости, в пределах 18 месяцев. Если патч не закрыл первопричину, родственная ошибка здесь.
Ночной расчёт связей ничего не нашёл.
Кандидаты в цепочки
Обход аутентификации и уязвимость, требующая привилегий, в одном продукте и близко по времени: вместе они могут дать путь без аутентификации.
—
Охват bug bounty
Известной публичной программы нет.
Источник: bounty-targets-data (публичные списки HackerOne, Bugcrowd, Intigriti, YesWeHack).
Технические детали
Условия атаки
- Может быть вызвана пользователем с локальным доступом к системе.
- Достаточно учётной записи с низкими привилегиями.
- Действия пользователя не требуются.
- Особые условия не требуются; воспроизводится стабильно.
В случае успеха
- Конфиденциальность
- нет
- Целостность
- нет
- Доступность
- высокое · работа сервиса может быть нарушена
- Вектор атаки
- Локальный
- Сложность атаки
- Низкая
- Требуемые привилегии
- Низкие
- Взаимодействие с пользователем
- Не требуется
- Область действия
- Не изменяется
- Влияние на конфиденциальность
- Нет
- Влияние на целостность
- Нет
- Влияние на доступность
- Высокое
Класс уязвимости (CWE)
—
Вектор CVSS
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
nvd-primary
Контекст атаки
Шаблоны атак MITRE CAPEC и техники ATT&CK для этого класса уязвимости (CWE). Отправная точка для правил обнаружения и threat hunting.
У MITRE нет сопоставления CAPEC/ATT&CK для этого CWE.
Журнал изменений
- Исправление✗ → ✓
Для отслеживаемых записей эти изменения приходят и как уведомления. →
Источники
Показать все источники (ещё 6)Свернуть
- git.kernel.org/stable/c/55835646da78e83e7ad06abd741ca8fd8c0b0ea7
- git.kernel.org/stable/c/6f442808a86eef847ee10afa9e6459494ed85bb3
- git.kernel.org/stable/c/742b90eaf394f0018352c0e10dc89763b2dd5267
- git.kernel.org/stable/c/b0bb67385480a3aa4c54b139e4f371ddd06b5150
- git.kernel.org/stable/c/d4a81b8ec639895999275ea2472c69825cd67ea4
- git.kernel.org/stable/c/db4ae18e1b31e0421fb5312e56aefa382bbc6ece
Рекомендации вендоров и официальные записи. Ссылки на эксплойты/PoC намеренно исключены.