CVE-2026-80776 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux была устранена следующая уязвимость:
futex: исправление состояния гонки (race) в функции futex_pivot_pending() при изменении размера хеш-таблицы для приватных семафоров
Задача, выполняющая пользовательское изменение размера приватной хеш-таблицы, может бесконечно оставаться заблокированной в прерываемом сне (uninterruptible sleep). Детектор зависших задач сообщает:
INFO: task futex-resizer:314 blocked for more than 10 seconds. task:futex-resizer state:D stack:14824 pid:314 tgid:312 ppid:311
Call Trace: __schedule+0x521/0xf30 schedule+0x22/0xa0 futex_hash_allocate+0x3db/0x490 __do_sys_prctl+0x6f5/0xbd0 do_syscall_64+0xf9/0x530 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Kernel panic - not syncing: hung_task: blocked tasks
Функция futex_pivot_pending() позволяет запросу на изменение размера продолжаться, если нет ожидающей замены хеш-таблицы (hash_new == NULL) или счетчик ссылок текущей хеш-таблицы достиг нуля.
После пробуждения от последней ссылки другая задача futex может завершить переход между двумя состояниями наблюдений:
T1 T2
futex_hash_allocate() wait_var_event(mm, ...) futex_pivot_pending(mm) hash_new != NULL futex_hash() futex_ref_get(old) -> false futex_pivot_hash(mm) hash_new = NULL __futex_pivot_hash(mm, new) rcu_assign_pointer(hash, new) fph = rcu_dereference(hash) /* new */ futex_ref_is_dead(fph) -> false schedule()
Переход изменяет состояние с hash_new != NULL и мертвой текущей хеш-таблицы на hash_new == NULL и живую текущую хеш-таблицу. Поскольку функция futex_pivot_pending() считывает значения hash_new и hash без сериализации, задача изменения размера может наблюдать значение hash_new в состоянии до перехода (pre-pivot), а значение hash — в состоянии после перехода (post-pivot). Это приводит к тому, что futex_pivot_pending() возвращает false, даже если переход уже завершен. Затем задача переходит ко сну после того, как пробуждение уже было потреблено.
Сериализуйте чтение состояний в функции futex_pivot_pending(), используя блокировку futex_mm_phash::lock. Это гарантирует атомарное наблюдение значений hash_new и hash функцией futex_pivot_pending(), устраняя состояние гонки (race condition).
VulDB is the best source for vulnerability data and more expert information about this specific topic.