Description
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.
Published: 2026-07-25
Score: n/a
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

In the Linux kernel, the Spreadtrum EIC driver incorrectly uses a regular spinlock during IRQ startup, which becomes a sleeping lock on PREEMPT_RT kernels. This path is not sleepable, leading to a Lockdep warning that can trigger a deadlock, kernel panic, or denial of service. The vulnerability is a kernel correctness issue; it does not grant userland code an escape route to execute arbitrary code or read protected data.

Affected Systems

All Linux kernels that include the eic‑sprd driver, which is used for Spreadtrum/GPIO hardware support. The exact affected version range is not specified, but any kernel build that has not applied the recent patch that converts the lock to a raw_spinlock_t remains vulnerable.

Risk and Exploitability

The EPSS score is below 1%, indicating a very low likelihood of active exploitation. It is not listed in the CISA KEV catalog. The likely attack vector is via a privileged or kernel-mode process that can trigger a GPIO interrupt and expose the sleeping lock path; this requires a PREEMPT_RT kernel configuration. Because the flaw is purely a kernel interference rather than a remote code payload, the risk is moderate, with potential for system instability rather than direct remote exploitation.

Generated by OpenCVE AI on August 2, 2026 at 12:45 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to a version that includes the commit converting the eic‑sprd lock from spinlock_t to raw_spinlock_t.
  • If an immediate upgrade is not possible, disable the eic‑sprd driver by removing its entry from the device tree or passing a boot parameter to skip loading the driver.
  • Apply the patch manually by replacing the existing spinlock_t with a raw_spinlock_t and verifying that no sleeping operations occur while the lock is held; confirm the Lockdep warning no longer appears in kernel logs.

Generated by OpenCVE AI on August 2, 2026 at 12:45 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4717-1 linux security update
Debian DLA Debian DLA DLA-4720-1 linux security update
Debian DLA Debian DLA DLA-4723-1 linux-6.1 security update
Debian DLA Debian DLA DLA-4724-1 linux-6.12 new package
History

Sat, 01 Aug 2026 02:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-665

Thu, 30 Jul 2026 00:15:00 +0000


Mon, 27 Jul 2026 05:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-665

Sat, 25 Jul 2026 09:30:00 +0000

Type Values Removed Values Added
Description 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.
Title gpio: eic-sprd: use raw_spinlock_t in the irq startup path
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-07-25T08:51:06.016Z

Reserved: 2026-07-19T15:36:31.787Z

Link: CVE-2026-64429

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-07-25T10:17:27.070

Modified: 2026-08-11T15:01:50.637

Link: CVE-2026-64429

cve-icon Redhat

Severity :

Publid Date: 2026-07-25T00:00:00Z

Links: CVE-2026-64429 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-02T13:00:05Z

Weaknesses
  • CWE-663

    Use of a Non-reentrant Function in a Concurrent Context