CVE-2026-10674

The NXP LPUART serial driver (drivers/serial/uart_mcux_lpuart.c), when CONFIG_UART_USE_RUNTIME_CONFIGURE is enabled, called LPUART_Deinit() at the start of mcux_lpuart_configure(), which disables the LPUART peripheral clocks. The requested configuration is validated only afterwards (in mcux_lpuart_configure_basic), and unsupported parity/data-bit/stop-bit/flow-control values return -ENOTSUP before the clock is re-enabled. As a result, a uart_configure() request with an unsupported configuration left the LPUART in a clock-disabled state; any subsequent access to LPUART registers (poll_out/poll_in, interrupt handling, or a later reconfigure) faults on the gated peripheral and escalates to a hard fault, crashing the system. uart_configure() is a Zephyr syscall whose verifier (z_vrfy_uart_configure) only checks that cfg is readable user memory and forwards the caller-supplied configuration unchanged, so an unprivileged userspace thread with access to an LPUART device can deterministically trigger the fault, a persistent system-wide denial of service. Introduced in v2.5.0 and present in all subsequent releases until this fix, which removes the LPUART_Deinit() call and instead only disables the transmitter/receiver, leaving the clock running.
Configurations

Configuration 1 (hide)

cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*

History

24 Oct 2026, 19:10

Type Values Removed Values Added
Summary
  • (es) El controlador serie NXP LPUART (drivers/serial/uart_mcux_lpuart.c), cuando CONFIG_UART_USE_RUNTIME_CONFIGURE está habilitado, llamaba a LPUART_Deinit() al inicio de mcux_lpuart_configure(), lo que deshabilita los relojes periféricos LPUART. La configuración solicitada se valida solo después (en mcux_lpuart_configure_basic), y los valores no admitidos de paridad/bits de datos/bits de parada/control de flujo devuelven -ENOTSUP antes de que el reloj se vuelva a habilitar. Como resultado, una solicitud de uart_configure() con una configuración no admitida dejaba el LPUART en un estado con el reloj deshabilitado; cualquier acceso posterior a los registros LPUART (poll_out/poll_in, manejo de interrupciones o una reconfiguración posterior) falla en el periférico bloqueado y escala a un fallo grave, bloqueando el sistema. uart_configure() es una llamada al sistema (syscall) de Zephyr cuyo verificador (z_vrfy_uart_configure) solo verifica que cfg es memoria de usuario legible y reenvía la configuración proporcionada por el llamador sin cambios, por lo que un hilo de espacio de usuario sin privilegios con acceso a un dispositivo LPUART puede desencadenar la falla de forma determinista, una denegación de servicio persistente a nivel de todo el sistema. Introducido en la v2.5.0 y presente en todas las versiones posteriores hasta esta corrección, que elimina la llamada a LPUART_Deinit() y en su lugar solo deshabilita el transmisor/receptor, dejando el reloj en funcionamiento.

Information

Published : 2026-07-21 22:16

Updated : 2026-10-24 19:10


NVD link : CVE-2026-10674

Mitre link : CVE-2026-10674

CVE.ORG link : CVE-2026-10674


JSON object : View

Products Affected

zephyrproject

  • zephyr
CWE
CWE-617

Reachable Assertion