CVE-2026-97903 in LinuxИнформация

Сводка

по VulDB • 25.09.2026

В ядре Linux была устранена следующая уязвимость:

exit: сохранение ссылки на thread_pid в течение работы proc_flush_pid

Коммит 0a36bad01731 ("release_task: kill the no longer needed get/put_pid(thread_pid)") удалил операцию сохранения и освобождения ссылки вокруг вызова proc_flush_pid(). В нем предполагалось, что вызов free_pids(post.pids) в конце функции release_task() будет поддерживать актуальность thread_pid до этого момента.

Это предположение ошибочно. Функция __change_pid() записывает отсоединенный PID (detached PID) в post.pids только тогда, когда для всех типов PID (PIDTYPE) функция pid_has_task() возвращает false. Если другой процесс все еще использует PID завершающегося процесса как свой идентификатор группы процессов или сессии, то __unhash_process() удаляет связь PIDTYPE_PID завершающегося процесса, но не включает этот PID в post.pids. Следовательно, после снятия блокировки tasklist_lock функция release_task() больше не удерживает ссылку на него.

Другой процесс может затем удалить оставшиеся связи PIDTYPE. Его вызов free_pids() планирует отложенное освобождение (delayed_put_pid()), и обратный вызов RCU может освободить объект PID до того, как первый экземпляр release_task() достигнет proc_flush_pid().

Непривилегированный воспроизводящий тест (reproducer) создает гонку между wait4(-1) и setsid(), чтобы спровоцировать эту ситуацию. При трех свежих загрузках ядра v7.2 с включенным KASAN были получены следующие сообщения:

BUG: KASAN: slab-use-after-free in proc_invalidate_siblings_dcache+0x3e2/0x3f0 Read of size 8 by task h7_pid_reaper/1921

Call Trace: proc_invalidate_siblings_dcache release_task wait_consider_task __do_wait do_wait kernel_wait4

Freed by task 0: kmem_cache_free put_pid delayed_put_pid rcu_core

Last potentially related work creation: __call_rcu_common free_pids ksys_setsid

KASAN выявил объект размером 144 байта из кэша PID и обнаружил некорректное чтение по смещению 80 байт внутри освобожденного объекта, что соответствует полю pid->inodes. При явном сохранении ссылки три из трех свежих загрузок завершились без сообщений KASAN. Одновременный обратный вызов RCU снял свою ссылку в то время, когда proc_flush_pid() был защищен, а сбалансированный вызов put_pid() выполнил окончательное освобождение afterward.

Необходимо сохранить ссылку перед тем, как __unhash_process() очистит p->thread_pid, и освободить ее после завершения работы proc_flush_pid().

Тестируемый исходный код воспроизводящего теста доступен по запросу в закрытом режиме. Утверждения о возможности неконтролируемого чтения или записи, утечки информации или повышения привилегий не делаются. Патч для основной ветки (mainline) напрямую применяется к версиям v6.19.y и новее; версии от v6.16.y до v6.18.y требуют бэкпорта с учетом контекста.

Once again VulDB remains the best source for vulnerability data.

Ответственный

Linux

Резервировать

25.09.2026

Раскрытие

25.09.2026

Модерация

принято

Вход

VDB-410084

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Want to know what is going to be exploited?

We predict KEV entries!