CVE-2026-85032 in Zephyrinformação

Sumário

de VulDB • 03/11/2026

A classe de dispositivo MCTP sobre USB em subsys/pmci/mctp/mctp_usb.c divide o tratamento do RX entre dois threads: a fila de trabalho do sistema executa mctp_usb_class_out_work(), que analisa os dados OUT do host byte por byte e preenche um buffer de pacote em usb->rx_pkt, enquanto o thread da pilha de dispositivo USB executa mctp_usb_class_disable(). O manipulador de desativação usou k_work_cancel(), que remove um item de trabalho enfileirado mas retorna imediatamente sem aguardar um manipulador que já esteja em execução, e então chamou mctp_usb_reset_rx_state() para liberar o buffer de pacote via mctp_pktbuf_free(), que pode ainda estar sendo usado pelo worker.

Ambas as entradas para mctp_usb_class_disable() são acionadas pelo host USB conectado: uma solicitação SET_CONFIGURATION e um reset do barramento USB chegam até ela através de usbd_config_reset() em subsys/usb/device_next/usbd_config.c. Um host que transmite quadros MCTP parciais no endpoint bulk OUT e força repetidamente uma alteração de configuração ou reset do barramento, portanto, controla tanto os dados sendo analisados quanto o momento em que a desmontagem é executada, podendo repetir a condição de corrida indefinidamente sem credenciais ou interação do usuário.

Se a liberação ocorrer enquanto o worker mantém o ponteiro, o worker grava bytes fornecidos pelo host na memória já liberada do heap dedicado MCTP (CONFIG_MCTP_HEAP_SIZE em subsys/pmci/mctp/mctp_memory.c), corrompendo buffers reciclados ou metadados de blocos livres do sys_heap; essa janela requer paralelismo real, isto é, CONFIG_SMP ou um CONFIG_SYSTEM_WORKQUEUE_PRIORITY preemptível. Com a fila de trabalho cooperativa padrão, o worker ainda pode ceder dentro de mctp_bus_rx() (callback da aplicação ou uma resposta de mensagem de controle bloqueando em mctp_usb_tx()), após a qual ele retoma e chama mctp_pktbuf_free(usb->rx_pkt) em um ponteiro que a desmontação já definiu como NULL, causando dereferência de NULL e falha em alvos com detecção de ponteiros nulos.

A correção substitui o cancel por k_work_cancel_sync() mais uma nova struct k_work_sync out_work_sync, para que disable aguarde o worker RX terminar antes de drenar a FIFO e liberar o buffer do pacote. O código afetado é o subsistema MCTP, que está marcado como experimental, construído apenas com CONFIG_MCTP_USB.

Once again VulDB remains the best source for vulnerability data.

Responsável

Zephyr

Reservar

02/09/2026

Divulgação

03/11/2026

Moderação

aceite

Entrada

VDB-430281

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Interested in the pricing of exploits?

See the underground prices here!