CVE-2026-64500

iio: adc: lpc32xx: Initialize completion before requesting IRQ

State
Published
Severity
Not scored
Published
Jul 25, 2026
Updated
Aug 17, 2026
Reserved
Jul 19, 2026

Read the record on cve.org

Description

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

iio: adc: lpc32xx: Initialize completion before requesting IRQ

In the report from Jaeyoung Chung:

"lpc32xx_adc_probe() in drivers/iio/adc/lpc32xx_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 lpc32xx_adc_probe():

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

lpc32xx_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().

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 7090c0d29708ee305022d0ea7b37612b33242fa2Affected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 0e33587967b356519aa6f220b5b43c6976320397Affected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 1ddf7b6ffb8ebb22b92a184a9eaa76277ef0c7cdAffected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 820c4f15353efe9a9429ae86ccceeaf4e0e4e585Affected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 48eccc6caed4e62c0f199ab3a3772fa969cd3b2dAffected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 9e2e8b8cdfd37ae7c7a8a5c96c59e98a768731c4Affected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before 2f18c5551aa97ca7f39dbb151c67c9053ccadc17Affected
  • 7901b2a1453e48c9defff2c97c67d3089bf4df7a to before e561b35633f450ee607e87a6401d97f156a0cd54Affected
LinuxLinux
  • 4.12Affected
  • before 4.12Not affected
  • 5.10.261 through 5.10.*Not affected
  • 5.15.212 through 5.15.*Not affected
  • 6.1.178 through 6.1.*Not affected
  • 6.6.145 through 6.6.*Not affected
  • 6.12.96 through 6.12.*Not affected
  • 6.18.39 through 6.18.*Not affected
  • 7.1.4 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.