IT SBIT Services
Schneeberger
DEEN
CVE tracker

Zephyr RTOS: Out-of-bounds write in NXP GAU ADC driver

CVE-2026-19184High 8.4

← All vulnerabilities

Summary

The NXP GAU ADC driver in Zephyr RTOS checked the caller-supplied buffer size in bytes against a sample count. This allows a buffer that is half the required size to be accepted, so ADC results are written past its end. On builds with CONFIG_USERSPACE, a user-mode thread that has been granted the ADC device can control the destination and length of the overrun, which can lead to kernel memory corruption, a crash or a privilege escalation. The issue affects NXP RW612 boards with the GAU ADC node enabled.

Affected

  • Zephyr 3.7.0 up to (excluding) 4.5.0, according to the CNA record and OSV
  • Advisory range: >= 3.7.0, <= 4.4.2
  • Only builds with CONFIG_USERSPACE=y on SoCs with an enabled GAU ADC node (e.g. NXP RW612 boards)

Fixed in

  • Patched versions per the GitHub advisory: 4.5.0 and 4.4.2
  • Zephyr 4.3.2 release notes also list the CVE as fixed
  • Unknown: whether the 3.7 LTS line and other 4.3.x or 4.4.x releases contain the fix; verify against the release tags before deploying

Workaround

  • No vendor-documented workaround.
  • Check whether CONFIG_USERSPACE is enabled and whether the ADC device is granted to user-mode threads; restrict this grant to trusted code.
  • Size ADC buffers generously in bytes in application code.

Exploitation

  • No known exploitation in the wild.
  • No public proof of concept found.
  • CISA SSVC: exploitation none, automatable no, technical impact partial.

Our recommendation

  • Identify any firmware or products that use Zephyr with NXP RW612 or similar GAU ADC hardware; ask vendors for their Zephyr version.
  • Apply a Zephyr release that contains the fix, or the vendor's firmware update.
  • Until patched, verify CONFIG_USERSPACE and the ADC device grants.
  • Relevance for SMEs is low unless they operate embedded or IoT devices built on Zephyr.

Public exploits

PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.

Research sources

Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 12:51.

Original description (NVD)

The NXP GAU ADC driver (drivers/adc/adc_mcux_gau_adc.c) validated the caller-supplied sequence->buffer_size, which is expressed in bytes, against the number of active channels, which is a sample count. It then stored that byte count directly in data->results_length and used it in mcux_gau_adc_read_samples() as the number of uint16_t slots available. Because each conversion result occupies sizeof(uint16_t) bytes, a buffer that was accepted as "large enough" could be written with up to twice its size in bytes, so every sample past the buffer's midpoint was written out of bounds. adc_read() and adc_read_async() are Zephyr system calls. The syscall verifier in drivers/adc/adc_handlers.c only confirms that the caller owns buffer_size writable bytes (K_SYSCALL_MEMORY_WRITE); deciding whether that size is sufficient for the requested channels and extra_samplings is delegated entirely to the driver. On a build with CONFIG_USERSPACE=y, a user-mode thread that has been granted the ADC device object could therefore submit a deliberately half-sized buffer and cause the driver's work-queue handler — which runs in supervisor mode, outside the caller's MPU restrictions — to write ADC conversion results past the end of that buffer, at an address and for a length of the caller's choosing. The overrun is bounded by the requested sequence: with sequence->options->extra_samplings set, the sampling loop walks the buffer pointer forward across every sampling, so the total overrun can reach the full size of the supplied buffer (kilobytes for a large extra_samplings). The written words are 16-bit ADC conversion results, so the content is only partially attacker-influenced (via the selected analog input, gain and resolution), but the destination and length are fully controlled — sufficient for kernel memory corruption, a crash, or a userspace-to-kernel privilege escalation. Builds without CONFIG_USERSPACE, or on SoCs other than NXP RW61x with the GAU ADC node enabled, are not exposed to the privilege boundary; there the same defect only causes a silent overflow when the application itself passes an undersized buffer. The fix replaces the ad-hoc check with the shared adc_sequence_validate_buffer() helper (validating against num_channels * sizeof(uint16_t)), stores buffer_size / sizeof(uint16_t) in results_length, and corrects the loop bound to a post-decrement so exactly the available number of slots may be written.

NVD references (2)

Sources

The tracker combines official, freely usable data sources – updated continuously:

This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.

Affected? We can help.

We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.