Skip to main content

Linux Kernel CVE-2026-64429

| EUVDEUVD-2026-48773 MEDIUM
Improper Locking (CWE-667)
2026-07-25 Linux GHSA-6pwp-xwgp-j72q
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 requires both PREEMPT_RT kernel config (non-default) and specific Unisoc EIC GPIO hardware; C and I are N as confirmed by description.

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

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 03, 2026 - 21:40 vuln.today
tag: Information Disclosure replaced by Denial Of Service
Analysis Generated
Sep 03, 2026 - 20:46 vuln.today
CVSS changed
Sep 03, 2026 - 18:37 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: eic-sprd: use raw_spinlock_t in the irq startup path

sprd_eic_irq_unmask() enables the GPIO IRQ and then updates controller state through sprd_eic_update(), which takes sprd_eic->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() -> sprd_eic_irq_unmask() -> sprd_eic_update() carrier and used the original spin_lock_irqsave(&sprd_eic->lock) edge. Lockdep

BUG: sleeping function called from invalid context hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv] sprd_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv] sprd_eic_update.constprop.0+0x48/0x90 [vuln_msv] sprd_eic_irq_unmask.constprop.0+0x35/0x50 [vuln_msv] __setup_irq.constprop.0+0xd/0x30 [vuln_msv]

Convert the Spreadtrum EIC controller lock to raw_spinlock_t. The locked section only serializes MMIO register updates and does not contain sleepable operations, so keeping it non-sleeping is appropriate for the irqchip callbacks.

AnalysisAI

Kernel crash (availability loss) in the Linux gpio/eic-sprd Spreadtrum EIC GPIO driver affects systems running PREEMPT_RT kernels with Unisoc/Spreadtrum SoCs. The IRQ startup path - request_threaded_irq() → irq_startup() → sprd_eic_irq_unmask() - calls sprd_eic_update(), which acquires a regular spinlock_t via spin_lock_irqsave(). On PREEMPT_RT kernels, spinlock_t is a sleeping lock; sleeping in a non-sleepable IRQ-disabled context triggers a kernel BUG: 'sleeping function called from invalid context', crashing the system. No public exploit has been identified at time of analysis; patches are available across all maintained stable branches.

Technical ContextAI

The affected component is drivers/gpio/gpio-eic-sprd.c, which implements the Spreadtrum (Unisoc) External Interrupt Controller (EIC) GPIO driver. The root cause is CWE-667 (Improper Locking): the driver uses a regular spinlock_t (sprd_eic->lock) to serialize MMIO register access in sprd_eic_update(). On standard SMP kernels this is fine, but CONFIG_PREEMPT_RT replaces spinlock_t with an RT-mutex-backed sleeping lock. The irq_startup() call chain that reaches sprd_eic_irq_unmask() runs with hard IRQs disabled, which is an explicitly non-sleepable context. Lockdep catches this at runtime as a 'sleeping function called from invalid context' BUG. The fix converts sprd_eic->lock to raw_spinlock_t, which remains a true non-sleeping spinlock even under PREEMPT_RT, appropriate because the locked section contains only MMIO register updates with no sleepable operations. The vulnerability has been present since the driver was introduced in Linux 4.17 (commit 25518e024e3a).

RemediationAI

Update to a patched stable kernel release: 5.10.261 or later in the 5.10.x series, 5.15.212+ in 5.15.x, 6.1.178+ in 6.1.x, 6.6.145+ in 6.6.x, 6.12.96+ in 6.12.x, 6.18.39+ in 6.18.x, or 7.1.4+ / 7.2-rc1 in the mainline series. Stable commits are at https://git.kernel.org/stable/c/96612bf2712cd961dbd9b52f3a9b4ab668f57628 and sibling commits per branch. If an immediate kernel update is not possible on an affected PREEMPT_RT system, the compensating control is to disable the Spreadtrum EIC GPIO driver (CONFIG_GPIO_SPRD=n) if the hardware is not in use - this eliminates the code path entirely. Alternatively, avoid deploying PREEMPT_RT kernels on Unisoc platforms until patched. There is no runtime switch; the vulnerability exists in the kernel module itself.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
Container suse/sl-micro/6.0/base-os-container:2.1.3-7.208 Container suse/sl-micro/6.1/base-os-container:2.2.1-5.184 Affected
Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.218 Container suse/sl-micro/6.1/kvm-os-container:2.2.1-5.186 Affected
Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.237 Container suse/sl-micro/6.1/rt-os-container:2.2.1-5.180 Affected
SUSE Linux Enterprise Real Time 15 SP7 SUSE Real Time Module 15 SP7 Fixed
SUSE Linux Micro 6.0 Fixed

Share

CVE-2026-64429 vulnerability details – vuln.today

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