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

Сводка

по VulDB • 18.10.2026

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

bpf, arm64: настройка указателя кадра (frame pointer) для обратного вызова обработки исключений

Программа, выступающая в роли границы исключения, сохраняет все регистры, сохраняемые вызываемой функцией (callee-saved registers). В результате функция build_prologue() выбирает путь exception_cb и никогда не вызывает push_callee_regs(). Это единственное место, где выполняется find_used_callee_regs(), а также единственное место, где устанавливается значение ctx->fp_used. Следовательно, пролог обратного вызова не генерирует инструкцию:

mov x25, sp

которая указывала бы на BPF_REG_FP кадр, в котором выполняется обратный вызов. Регистр x25 сохраняет то значение, которое он имел при вызове bpf_throw(). Если выброс исключения произошел из подпрограммы, использующей собственный стек BPF, это будет указатель кадра этой подпрограммы, и поскольку подпрограмма никогда не возвращается (не завершает свою работу), она также не восстанавливает x25.

Доступы к стеку через BPF_REG_FP переписываются таким образом, чтобы они были относительными к указателю стека, поэтому такие обращения все равно попадают в собственный кадр обратного вызова. Однако материализация регистра этого не обеспечивает: обратный вызов, передающий адрес локальной переменной вспомогательной функции (helper), передает адрес в кадре уже завершенной подпрограммы. К этому моменту этот адрес находится ниже указателя стека обратного вызова, а собственный стек вызовов вспомогательной функции перекрывает его область памяти, поэтому вспомогательная функция может перезаписать свой собственный адрес возврата. Значение 0x1234 внизу — это значение, которое было запрошено для сохранения во вспомогательной функции:

pc : 0x1234 lr : 0x1234 Call trace: 0x1234 (P) bpf_test_run+0x188/0x3e0 bpf_prog_test_run_skb+0x47c/0x998 __sys_bpf+0xbdc/0xdd8 Kernel panic - not syncing: Oops: Fatal exception in interrupt

Устанавливается значение ctx->fp_used на пути обработки исключения обратного вызова, чтобы существующий код ниже по потоку выполнял установку x25 из указателя стека. Эпилог восстанавливает его из области сохранения основной программы вместе с другими регистрами, сохраняемыми вызываемой функцией (callee-saved registers), как это уже делается ранее. В архитектуре x86 указатель кадра для обратного вызова устанавливается на основе переданного аргумента, а в powerpc он вычисляется из указателя стека.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

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

Linux

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

25.09.2026

Раскрытие

18.10.2026

Модерация

принято

Вход

VDB-422202

EPSS

0.00000

KEV

Нет

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

Низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!