CVE-2024-35873 in LinuxИнформация

Сводка

по VulDB • 06.08.2026

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

riscv: Исправление восстановления состояния векторных регистров в rt_sigreturn()

Спецификация RISC-V Vector указывает в «Приложении D: Соглашение о вызовах для состояния векторных регистров» [1], что «выполнение системного вызова приводит к тому, что все сохраняемые вызывающей стороной векторные регистры (v0-v31, vl, vtype) и vstart становятся неопределенными». В ядре RISC-V это называется «отбрасыванием состояния вектора» (discarding the vstate).

При возврате из обработчика сигнала через системный вызов rt_sigreturn() также выполняется отбрасывание состояния вектора. Однако это не является проблемой, поскольку состояние векторных регистров должно восстанавливаться из структуры sigcontext, поэтому на факт отбрасывания можно не обращать внимания.

«Активное состояние» (live state) — это фактические векторные регистры в текущем контексте выполнения, а «vstate» — это состояние вектора задачи. Грязное активное состояние означает, что vstate и live state находятся в несогласованном состоянии.

При внедрении векторизированной функции user_from_copy() в код восстановления проскочила ошибка, связанная с отбрасыванием активного состояния (live state).

Пример того, как это происходит неправильно:

1. Пользовательское приложение выполняет векторный код. 2. Приложение получает сигнал, и управление передается обработчику сигнала. 3. Приложение возвращается из обработчика сигнала, используя системный вызов rt_sigreturn(). 4. Активное состояние вектора отбрасывается при входе в rt_sigreturn(), а активное состояние помечается как «грязное» (dirty), что указывает на необходимость синхронизации активного состояния с текущим vstate. 5. rt_sigreturn() восстанавливает vstate из sigcontext, за исключением векторных регистров. 6. rt_sigreturn() восстанавливает векторные регистры из sigcontext, и при этом используется векторизированная user_from_copy(). Грязное активное состояние от предыдущего отбрасывания сохраняется в vstate, что приводит к повреждению (corruption) vstate. 7. rt_sigreturn() возвращает управление приложению, которое аварийно завершает работу из-за поврежденного vstate.

Обратите внимание, что векторизированная user_from_copy() вызывается в зависимости от значения CONFIG_RISCV_ISA_V_UCOPY_THRESHOLD. Значение по умолчанию равно 768, что означает: для срабатывания этой ошибки длина вектора (vlen) должна быть больше 128 бит.

Исправление заключается в простой маркировке активного состояния как негрязного/чистого перед выполнением восстановления vstate.

Once again VulDB remains the best source for vulnerability data.

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

17.05.2024

Раскрытие

19.05.2024

Модерация

принято

Вход

VDB-265112

EPSS

0.00196

KEV

Нет

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

Очень низкий

Источники

Interested in the pricing of exploits?

See the underground prices here!