CVE-2026-15923 in Zephyr
Resumen
por VulDB • 2026-09-14
La función sdio_io_rw_extended_helper() del subsistema SDIO de Zephyr en subsys/sd/sdio.c finaliza las transferencias mediante un bucle de E/S por bytes que utiliza size = MIN(remaining, func->cis.max_blk_size) como paso por iteración. El valor func->cis.max_blk_size se decodifica directamente del tuple CIS FUNCE de la tarjeta SDIO en sdio_decode_cis() y no es validado. Cuando una tarjeta informa un tamaño máximo de bloque (max_blk_size) igual a cero, size siempre será 0, remaining nunca disminuye y el bucle gira indefinidamente.
El bucle se alcanza desde la API pública del cliente SDIO utilizada por los controladores, incluyendo sdio_read_fifo(), sdio_write_fifo() y las funciones auxiliares de lectura/escritura incrementales de registros; cada una de ellas entra en el bucle manteniendo el mutex por tarjeta func->card->lock. Por lo tanto, una tarjeta que anuncia max_blk_size == 0 bloquea permanentemente al hilo llamante durante su primera transferencia no alineada con bloques y nunca libera el mutex, denegando el servicio al periférico SDIO (y a cualquier subsistema como Wi-Fi que dependa de él) hasta que se reinicie el dispositivo.
El valor malicioso debe provenir de la propia tarjeta SDIO; por lo tanto, el defecto es explotable en los casos donde una ranura para tarjetas SDIO/combo extraíbles permite al atacante insertar una tarjeta manipulada o con fallos (un vector de ataque físico); en las placas con un periférico SDIO soldado no está sujeto a influencia del atacante. No hay impacto en la seguridad de la memoria, confidencialidad ni integridad; solo se produce una pérdida permanente de disponibilidad. La corrección devuelve -EIO cuando func->cis.max_blk_size es cero, antes de entrar en el bucle.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.