Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-64502

CVE-2026-64502: Linux Kernel Buffer Overflow Vulnerability

CVE-2026-64502 is a buffer overflow flaw in the Linux kernel's IIO ADC ad_sigma_delta driver that causes heap corruption in registerless devices. This article covers the technical details, affected versions, and mitigations.

Published:

CVE-2026-64502 Overview

CVE-2026-64502 is a heap corruption vulnerability in the Linux kernel's Industrial I/O (IIO) subsystem, specifically within the ad_sigma_delta analog-to-digital converter (ADC) driver. The flaw resides in ad_sigma_delta_clear_pending_event(), which falls through to the status register read path for registerless devices that lack a rdy_gpiod. On affected devices, the function performs a memset(data + 2, 0xff, 0 - 1) operation, where the length underflows to SIZE_MAX, corrupting the kernel heap. A secondary path with rdy_gpiod set but num_resetclks = 0 reaches the same corrupting memset.

Critical Impact

Local low-privileged users interacting with affected IIO ADC devices can trigger kernel heap corruption, leading to potential privilege escalation, kernel memory disclosure, or denial of service.

Affected Products

  • Linux kernel IIO subsystem — drivers/iio/adc/ad_sigma_delta.c
  • Registerless ADC devices: ad7191, ad7780, max11205
  • Any device configured with rdy_gpiod set and num_resetclks = 0

Discovery Timeline

  • 2026-07-25 - CVE-2026-64502 published to NVD
  • 2026-07-27 - Last updated in NVD database

Technical Details for CVE-2026-64502

Vulnerability Analysis

The defect lives in the sigma-delta ADC driver logic that handles pending conversion events. When ad_sigma_delta_clear_pending_event() is invoked on a device with has_registers = false and no rdy_gpiod, execution falls through to ad_sd_read_reg(). That function skips the address byte and clocks raw MISO bytes, making the read byte-for-byte identical to a conversion data read. The driver partially consumes any pending conversion result, corrupting the data stream for the subsequent ad_sd_read_reg() call inside ad_sigma_delta_single_conversion().

The more serious failure occurs when num_resetclks = 0. Under this configuration, data_read_len evaluates to zero. If the clocked byte has bit 7 clear, pending_event is set and the driver executes memset(data + 2, 0xff, 0 - 1). The length argument underflows to SIZE_MAX, producing an out-of-bounds heap write of unbounded size.

Root Cause

The root cause is missing guard logic in ad_sigma_delta_clear_pending_event(). The function assumes a valid read length and a register-capable device, but neither condition holds for registerless devices with num_resetclks = 0. The arithmetic data_read_len - 1 performed as an unsigned computation wraps to SIZE_MAX, exposing a boundary-condition error [CWE-193, CWE-787] that corrupts the kernel heap.

Attack Vector

Exploitation requires local access with permissions to interact with the affected IIO device node under /sys/bus/iio or /dev/iio:deviceN. An attacker with low privileges triggers a single conversion request on a vulnerable registerless ADC. The subsequent clear_pending_event path reaches the underflowed memset, overwriting adjacent slab objects with 0xff bytes. Successful heap grooming can yield arbitrary kernel memory corruption and privilege escalation.

No verified public proof-of-concept code is available. See the upstream fix commits for technical details: Kernel Git Commit 3394e0b, Kernel Git Commit 3bceb26d, and Kernel Git Commit 91bc6767.

Detection Methods for CVE-2026-64502

Indicators of Compromise

  • Kernel log entries referencing SLUB/SLAB corruption, KASAN out-of-bounds write reports, or general protection faults originating from ad_sigma_delta_clear_pending_event or ad_sd_read_reg.
  • Unexpected kernel oops or panic traces on systems using ad7191, ad7780, or max11205 ADC hardware.
  • Anomalous reads or writes against /dev/iio:device* or /sys/bus/iio/devices/iio:device*/in_voltage*_raw from non-privileged processes.

Detection Strategies

  • Enable KASAN on test kernels to catch the out-of-bounds memset write triggered by data_read_len = 0.
  • Audit loaded IIO ADC driver modules with lsmod | grep -E 'ad7191|ad7780|max11205|ad_sigma_delta' and cross-reference against kernel version.
  • Correlate process activity accessing IIO device nodes with subsequent kernel error events in the same time window.

Monitoring Recommendations

  • Forward dmesg, journalctl -k, and /var/log/kern.log to a central data lake and alert on SLUB corruption, KASAN reports, and kernel oops signatures.
  • Monitor unprivileged process access to /dev/iio:device* paths using auditd rules on the open, read, and ioctl syscalls.
  • Track kernel module load events for ad_sigma_delta to inventory exposed systems.

How to Mitigate CVE-2026-64502

Immediate Actions Required

  • Apply the upstream fix commits 3394e0b3, 3bceb26d, and 91bc6767 or upgrade to a kernel release that includes them.
  • Inventory embedded, industrial, and IoT systems using ad7191, ad7780, or max11205 ADCs and prioritize them for patching.
  • Restrict access to /dev/iio:device* nodes to trusted service accounts using udev rules and filesystem permissions.

Patch Information

The fix returns 0 immediately from ad_sigma_delta_clear_pending_event() when neither rdy_gpiod nor has_registers is set, and adds an explicit data_read_len == 0 guard after the pending-event check to prevent the underflowed memset. Patch references: Kernel Git Commit 3394e0b, Kernel Git Commit 3bceb26d, Kernel Git Commit 91bc6767.

Workarounds

  • Unload the ad_sigma_delta module on systems where the affected ADCs are not required: modprobe -r ad_sigma_delta.
  • Blacklist the driver via /etc/modprobe.d/ on systems that cannot be patched immediately.
  • Tighten permissions on IIO device nodes so only privileged system services can issue conversion requests.
bash
# Configuration example: blacklist the vulnerable driver and restrict IIO device access
echo 'blacklist ad_sigma_delta' | sudo tee /etc/modprobe.d/blacklist-ad-sigma-delta.conf
sudo depmod -a

# Restrict IIO device node access via udev
cat <<'EOF' | sudo tee /etc/udev/rules.d/90-iio-restrict.rules
KERNEL=="iio:device*", MODE="0600", OWNER="root", GROUP="root"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.