Skip to main content

Linux Kernel CVE-2026-64428

| EUVDEUVD-2026-48772 MEDIUM
2026-07-25 Linux GHSA-3jvv-rp8p-q944
5.5
CVSS 3.1 · NVD
Share

Severity by source

NVD PRIMARY
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI
4.7 MEDIUM

AC:H because exploitation simultaneously requires a PREEMPT_RT kernel build and specific legacy SCH GPIO hardware; no confidentiality or integrity impact.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE
MEDIUM
qualitative
Red Hat
5.5 LOW
qualitative

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

6
Metadata Corrected
Sep 04, 2026 - 15:40 vuln.today
tag: Information Disclosure removed
Analysis Generated
Sep 04, 2026 - 15:09 vuln.today
CVSS changed
Sep 04, 2026 - 15:07 NVD
5.5 (MEDIUM)
Patch available
Jul 25, 2026 - 11:18 EUVD
CVE Published
Jul 25, 2026 - 08:51 nvd
MEDIUM 5.5
CVE Published
Jul 25, 2026 - 08:51 cve.org
UNKNOWN (no severity yet)

DescriptionNVD

In the Linux kernel, the following vulnerability has been resolved:

gpio: sch: use raw_spinlock_t in the irq startup path

sch_irq_unmask() enables the GPIO IRQ and then updates the controller state through sch_irq_mask_unmask(), which takes sch->lock with spin_lock_irqsave(). The callback can be reached from irq_startup() while setting up a requested IRQ. That path is not sleepable, but on PREEMPT_RT a regular spinlock_t becomes a sleeping lock.

This issue was found by our static analysis tool and then manually reviewed against the current tree.

The grounded PoC kept the request_threaded_irq() -> __setup_irq() -> irq_startup() -> sch_irq_unmask() -> sch_irq_mask_unmask() carrier and used the original spin_lock_irqsave(&sch->lock) edge. Lockdep reported:

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]

Convert the SCH controller lock to raw_spinlock_t. The same lock is also used by the GPIO direction and value callbacks, but those critical sections only update MMIO-backed GPIO registers and do not contain sleepable operations. Keeping this register lock non-sleeping is therefore appropriate for the irqchip callbacks and does not change the GPIO-side locking contract.

AnalysisAI

Kernel panic risk in the Linux gpio-sch driver exposes PREEMPT_RT systems with legacy Intel SCH GPIO hardware to a local denial of service. The SCH IRQ unmask callback acquires a regular spinlock inside a non-sleepable IRQ-setup context; under PREEMPT_RT, that spinlock is reimplemented as a sleeping lock, triggering a lockdep BUG and potential kernel panic. Patches are available across all active stable branches (5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.39, 7.1.4); no public exploit exists and EPSS is 0.21% (percentile 12%).

Technical ContextAI

The Intel System Controller Hub (SCH) GPIO driver (drivers/gpio/gpio-sch.c) protects MMIO register access with a shared lock (sch->lock) declared as spinlock_t. In a standard kernel, spinlock_t is a busy-wait primitive safe to acquire with interrupts disabled. Under CONFIG_PREEMPT_RT, however, spinlock_t is replaced at compile time with an RT mutex - a sleeping lock - to minimize latency for real-time workloads. The vulnerable call chain request_threaded_irq() → __setup_irq() → irq_startup() → sch_irq_unmask() → sch_irq_mask_unmask() runs in a non-sleepable context (hardirqs disabled during __setup_irq). Attempting to acquire the now-sleeping lock in that context violates the kernel's sleeping-function-in-atomic-context invariant, which lockdep detects and reports as a BUG. The fix converts sch->lock to raw_spinlock_t, which remains a true busy-wait primitive under PREEMPT_RT and is appropriate for the brief MMIO register accesses in these critical sections. CWE is listed as N/A; the closest applicable class would be CWE-667 (Improper Locking).

RemediationAI

Update to the appropriate patched stable kernel release for your branch: 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18.39, or 7.1.4. The upstream fix commits are available at https://git.kernel.org/stable/c/3b1aa05ec27eeccc889ecaa3f2d9baa9f453e50d (and companion commits 286533cb14a3c8a8bd39ff64ea2fc8e1aa0f638b, 4f03a15cc73c83740fc355ee22b336492d17b4da, 41cad91a09d69e8fff4e936db29b1054b4e9f9f7, 4508366ab7dd0c2917a51a9c2e23cc1b9d35157a, 7a550256d68bbdfa0903ab1c4595c04a6815493a, a235cec779bb39ec8f961a935b28a2ce278c6c64). As an interim workaround where SCH GPIO IRQ functionality is not required, blacklisting the gpio-sch kernel module (echo 'blacklist gpio-sch' >> /etc/modprobe.d/gpio-sch.conf && modprobe -r gpio-sch) eliminates the vulnerable code path with no side effects beyond disabling SCH GPIO interrupt support. Systems not running PREEMPT_RT kernels are entirely unaffected and require no action.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
openSUSE Tumbleweed Fixed
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected

Share

CVE-2026-64428 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy