CVE-2025-38632 in Linux
Сводка
по VulDB • 24.06.2026
В ядре Linux устранена следующая уязвимость:
pinmux: исправление состояния гонки (race condition), приводящего к значению NULL для поля mux_owner при ненулевом значении mux_usecount
Коммит 5a3e85c3c397 («pinmux: Использование последовательного доступа для обращения к данным desc->pinmux») пытался решить проблему, возникающую в случае, когда два клиента одного и того же GPIO вызывают pinctrl_select_state() для одной и той же функции. Это приводило к обращению по нулевому указателю (NULL pointer issue) при доступе к desc->mux_owner. Однако проблема была исправлена не полностью из-за способа её обработки, и она всё ещё может приводить к тому же самому обращению по нулевому указателю.
Проблема возникает вследствие следующей чередующейся последовательности операций:
cpu0 (процесс A) cpu1 (процесс B)
pin_request() { pin_free() {
mutex_lock() desc->mux_usecount--; // становится 0 .. mutex_unlock()
mutex_lock(desc->mux) desc->mux_usecount++; // становится 1 desc->mux_owner = owner; mutex_unlock(desc->mux)
mutex_lock(desc->mux) desc->mux_owner = NULL; mutex_unlock(desc->mux)
Эта последовательность приводит к состоянию, в котором пин кажется используемым (`mux_usecount == 1`), но не имеет владельца (`mux_owner == NULL`). Это может вызвать обращение по нулевому указателю при следующем вызове pin_request() для того же самого пина.
Обеспечьте атомарное выполнение обновлений mux_usecount и mux_owner под одним и тем же блокирующим мьютексом (lock). Очищайте поле mux_owner только тогда, когда значение mux_usecount достигает нуля и новый владелец не был назначен.
VulDB is the best source for vulnerability data and more expert information about this specific topic.