Executive brief
A technical issue was identified in the Linux kernel's GPIO (General Purpose Input/Output) driver for Intel SCH controllers. On systems using the Real-Time (PREEMPT_RT) patchset, this could cause the system to attempt to 'sleep' or pause during a critical operation where pausing is not allowed. While primarily a stability concern, such issues can lead to system crashes or unpredictable behavior in specialized industrial or embedded computing environments.
Technical details
A bug was identified in the `gpio-sch` driver where `sch_irq_unmask()` calls `sch_irq_mask_unmask()`, which acquired a standard `spinlock_t` using `spin_lock_irqsave()`. In the Linux kernel's PREEMPT_RT configuration, standard spinlocks are sleepable. However, this specific code path is reached via `irq_startup()`, which is a non-sleepable context. This mismatch triggers a 'sleeping function called from invalid context' error. The fix involves converting the `sch->lock` to a `raw_spinlock_t`, ensuring the lock remains non-sleepable even on Real-Time kernels, which is appropriate for MMIO-backed GPIO register updates.
Affected products
- Linux Linux Kernel 7a81638485c1 to 3b1aa05ec27e
Timeline
- 2026-06-17: disclosed: Initial patch submitted by Runyu Xiao
- 2026-07-24: patched: Patch committed to stable tree by Greg Kroah-Hartman
- 2026-07-25: advisory: CVE-2026-64428 published
References
- https://git.kernel.org/stable/c/286533cb14a3c8a8bd39ff64ea2fc8e1aa0f638b
- https://git.kernel.org/stable/c/3b1aa05ec27eeccc889ecaa3f2d9baa9f453e50d
- https://git.kernel.org/stable/c/41cad91a09d69e8fff4e936db29b1054b4e9f9f7
- https://git.kernel.org/stable/c/4508366ab7dd0c2917a51a9c2e23cc1b9d35157a
- https://git.kernel.org/stable/c/4f03a15cc73c83740fc355ee22b336492d17b4da
- https://git.kernel.org/stable/c/7a550256d68bbdfa0903ab1c4595c04a6815493a
- https://git.kernel.org/stable/c/a235cec779bb39ec8f961a935b28a2ce278c6c64