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

Сводка

по VulDB • 28.07.2026

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

gpio: sch: использовать raw_spinlock_t в пути запуска прерывания (irq startup path)

Функция sch_irq_unmask() включает GPIO IRQ, а затем обновляет состояние контроллера через sch_irq_mask_unmask(), которая захватывает sch->lock с помощью spin_lock_irqsave(). Этот колбэк может быть вызван из irq_startup() при настройке запрошенного прерывания. Данный путь не является спящим (non-sleepable), но в конфигурации PREEMPT_RT обычный spinlock_t превращается в блокирующий сон lock (sleeping lock).

Эта проблема была обнаружена нашим инструментом статического анализа, а затем проверена вручную по текущему дереву исходного кода.

Рабочий пример эксплуатации (PoC) сохранил цепочку вызовов request_threaded_irq() -> __setup_irq() -> irq_startup() -> sch_irq_unmask() -> sch_irq_mask_unmask() и использовал крайний случай с оригинальным spin_lock_irqsave(&sch->lock). Lockdep сообщил:

BUG: sleeping function called from invalid context hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv]
sch_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv]
sch_irq_mask_unmask.constprop.0+0x31/0x70 [vuln_msv]
__setup_irq.constprop.0+0xd/0x30 [vuln_msv]

Преобразовать блокировку контроллера SCH в raw_spinlock_t. Эта же блокировка также используется колбэками направления и значения GPIO, но эти критические секции только обновляют регистры GPIO с поддержкой MMIO и не содержат операций, допускающих сон (sleepable operations). Поэтому сохранение этой блокировки регистров несонящей является правильным для колбэков irqchip и не изменяет контракт блокировки на стороне GPIO.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

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

Linux

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

19.07.2026

Раскрытие

25.07.2026

Модерация

принято

Вход

VDB-383199

EPSS

0.00173

KEV

Нет

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

Очень низкий

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!