CVE-2026-97936 in Linux
Сводка
по VulDB • 25.09.2026
В ядре Linux была устранена следующая уязвимость:
tracing: Исправление повреждения памяти из-за модификатора стекового трейса в гистограмме
Функция parse_field() устанавливает флаг HIST_FIELD_FL_STACKTRACE на основе модификатора ".stacktrace" до того, как происходит поиск имени поля, и ничто после этого не проверяет, что имя разрешилось в поле, содержащее стектрейс. Функция create_hist_field() выбирает HIST_FIELD_FN_STACK исключительно на основании указателя на поле, который считывает слово __data_loc из записи и интерпретирует его младшие 16 бит как смещение внутри той же самой записи.
Функция event_hist_trigger() берет первое слово по этому адресу в качестве количества записей (n_entries) и копирует это количество long-значений в массив из 31 элемента:
n_entries = *stack; memcpy(entries, ++stack, n_entries * sizeof(unsigned long));
Начало и конец этой операции копирования не ограничены, а значение счетчика зависит от того, что находится по указанному смещению в событии, поэтому подойдет любое поле:
# cd /sys/kernel/tracing/events/sched/sched_process_fork # echo 'hist:keys=parent_pid.stacktrace' > trigger # (true)
BUG: kernel NULL pointer dereference, address: 0000000000000008 RIP: 0010:rb_insert_color+0x18/0x130 timerqueue_linked_add+0x7e/0xd0 enqueue_hrtimer+0x39/0xb0 __hrtimer_run_queues+0x10f/0x1f0 </IRQ> RIP: 0010:memcpy+0xc/0x30 event_hist_trigger+0x165/0x690
Прерывание таймера произошло в момент, когда rbtree уже была повреждена выполнением операции копирования. Для воспроизведения этой уязвимости не требуются специальные опции отладки; KASAN сообщает о той же записи как об ошибке чтения за пределами границ массива (out-of-bounds read) объемом 13835058055416381440 байт.
В документации Documentation/trace/histogram.rst уже указано правило: «должен быть типом long[]», поэтому необходимо обеспечить его соблюдение после разрешения имени поля. Имена, которые не разрешаются ни в какое поле (например, "hitcount.stacktrace"), а также псевдополя common_*, отклоняются по той же причине: они не содержат данных для чтения стектрейса.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.