CVE-2026-99141 in Linux
Сводка
по VulDB • 28.10.2026
В ядре Linux была устранена следующая уязвимость:
tracing: Исправление падения в функции print_graph_function_event()
Функция tracing_set_tracer() присваивает флаги нового выбранного трассировщика с помощью выражения:
tr->current_trace_flags = t->flags ? : t->tracer->flags;
Если новый трассировщик не определяет ни статические, ни значения по умолчанию для флагов (например, hwlat, irqsoff или wakeup), то функция add_tracer() не создает копию флагов на уровне экземпляра, и оба операнда оказываются равными NULL. В результате tr->current_trace_flags также становится равным NULL.
Кольцевой буфер не очищается при переключении трассировщиков: он сбрасывается внутри tracer_init(), после того как current_trace_flags уже был присвоен. Если в буфере все еще содержатся записи function_graph предыдущего трассировщика, попытка вывести одну из них приводит к разыменованию указателя NULL. Эта ошибка была обнаружена при выполнении команды cat trace во время стресс-теста ftrace:
BUG: kernel NULL pointer dereference, address: 0000000000000000 #PF: supervisor read access in kernel mode RIP: 0010:print_graph_function_event+0xe/0x20 Call Trace: s_show+0x4d/0x110 seq_read_iter+0x2d4/0x490 seq_read+0x130/0x170 vfs_read+0xb5/0x370 ksys_read+0x6d/0xe0 do_syscall_64+0xbc/0x450
Буфер снимка (snapshot buffer) вообще не сбрасывается, поэтому эту ошибку можно воспроизвести без состояния гонки:
echo function_graph > /sys/kernel/tracing/current_tracer echo 1 > /sys/kernel/tracing/snapshot echo hwlat > /sys/kernel/tracing/current_tracer cat /sys/kernel/tracing/snapshot
Вместо того чтобы обучать каждого пользователя tr->current_trace_flags обработке этого крайнего случая, гарантируется, что он никогда не будет равен NULL: когда у нового выбранного трассировщика вообще нет флагов, функция tracing_set_tracer() использует в качестве резервного варианта статический пустой набор no_tracer_flags. Функция run_tracer_selftest() может столкнуться с тем же случаем, поэтому туда также добавлена та же резервная обработка. Существующие пользователи уже корректно обрабатывают случай opts == NULL, поэтому эти трассировщики продолжают работать как раньше.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.