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

iio: adc: spear: Initialize completion before requesting IRQ

In the report from Jaeyoung Chung:

"spear_adc_probe() in drivers/iio/adc/spear_adc.c registers its
interrupt handler with devm_request_irq() before it initializes
st->completion with init_completion(). If an interrupt arrives after
devm_request_irq() and before init_completion(), the handler calls
complete() on an uninitialized completion, causing a kernel panic.

The probe path, in spear_adc_probe():

iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st kzalloc-zeroed */
...
retval = devm_request_irq(&pdev->dev, irq, spear_adc_isr, 0,
LPC32XXAD_NAME, st); /* register handler */
...
init_completion(&st->completion); /* initialize completion */

spear_adc_isr() calls complete():

complete(&st->completion);

If the device raises an interrupt before init_completion() runs,
complete() acquires the uninitialized wait.lock and walks the zeroed
task_list in swake_up_locked(). The zeroed task_list makes list_empty()
return false, so swake_up_locked() dereferences a NULL list entry,
triggering a KASAN wild-memory-access."

Fix the chance of a spurious IRQ causing an uninitialized pointer
dereference by moving init_completion() above devm_request_irq().
Published: 2026-08-06
Score: n/a
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

In the Linux kernel spear ADC driver, the interrupt handler is registered before the completion structure it uses is initialized. If the hardware triggers an interrupt at that narrow window, the handler performs a complete() on an uninitialized completion. This race condition forces the kernel to read an invalid wait lock and a zeroed task list, leading to a wild‑memory‑access and a system kernel panic that can reboot the device or allow a local attacker to crash the kernel. The crash is a denial‑of‑service that could also provide a foothold for local privilege escalation if the attacker can influence the device or its interrupts.

Affected Systems

All Linux kernel releases that include the spear ADC driver (drivers/iio/adc/spear_adc.c) before the commit that moved init_completion() above devm_request_irq(). The vulnerability applies to all kernel builds with this driver, regardless of vendor, as the Common Platform Enumeration lists every Linux kernel.

Risk and Exploitability

The flaw is a local privilege or device‑dependent race that requires the presence of the spear ADC hardware and the driver being loaded. No remote exploitation surface is described, and the complexity is high because the attacker must trigger a spurious interrupt during initialization. While the EPSS score is not available, the lack of KEV listing and the severity of a kernel panic give the vulnerability a high impact rating that warrants prompt remediation.

Generated by OpenCVE AI on August 6, 2026 at 08:36 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update the Linux kernel or apply the vendor’s patch that moves init_completion() before devm_request_irq() to the spear ADC driver.
  • If an immediate kernel upgrade is not possible, unload or disable the spear ADC driver or block its interrupt until initialization completes.
  • Configure the system to disable the IIO spear ADC module via modprobe options or kernel boot parameters until the fix can be applied.

Generated by OpenCVE AI on August 6, 2026 at 08:36 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 06 Aug 2026 09:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-476
CWE-665

Thu, 06 Aug 2026 07:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: iio: adc: spear: Initialize completion before requesting IRQ In the report from Jaeyoung Chung: "spear_adc_probe() in drivers/iio/adc/spear_adc.c registers its interrupt handler with devm_request_irq() before it initializes st->completion with init_completion(). If an interrupt arrives after devm_request_irq() and before init_completion(), the handler calls complete() on an uninitialized completion, causing a kernel panic. The probe path, in spear_adc_probe(): iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st kzalloc-zeroed */ ... retval = devm_request_irq(&pdev->dev, irq, spear_adc_isr, 0, LPC32XXAD_NAME, st); /* register handler */ ... init_completion(&st->completion); /* initialize completion */ spear_adc_isr() calls complete(): complete(&st->completion); If the device raises an interrupt before init_completion() runs, complete() acquires the uninitialized wait.lock and walks the zeroed task_list in swake_up_locked(). The zeroed task_list makes list_empty() return false, so swake_up_locked() dereferences a NULL list entry, triggering a KASAN wild-memory-access." Fix the chance of a spurious IRQ causing an uninitialized pointer dereference by moving init_completion() above devm_request_irq().
Title iio: adc: spear: Initialize completion before requesting IRQ
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-08-06T07:13:54.519Z

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

Link: CVE-2026-64602

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-06T08:45:17Z

Weaknesses