PT-2026-111112 · Zephyrproject · Zephyr

CVE-2026-19937

·

Publicado

2026-10-12

·

Atualizado

2026-10-13

CVSS v3.1

5.7

Média

VetorAV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
The Bluetooth Mesh Access layer delayable-message machinery in subsys/bluetooth/mesh/delayable msg.c manages a static pool of CONFIG BT MESH ACCESS DELAYABLE MSG COUNT message contexts (default 4) threaded onto a free ctx or busy ctx list. release delayable msg ctx() returned a context to free ctx only when sys slist find and remove() found it on busy ctx. The chunk-exhaustion error path in bt mesh delayable msg manage() releases a context that was already popped off free ctx but not yet inserted on busy ctx, so the context was appended to neither list and was permanently lost from the pool. Because bt mesh delayable msg init() runs only once from bt mesh init(), and node reset/suspend only drain busy ctx, the loss survives unprovision, re-provision and suspend/resume — it is cleared only by a reboot.
The error path is reached when the chunk pool (CONFIG BT MESH ACCESS DELAYABLE MSG CHUNK COUNT, default 40 chunks) is short of the chunks a new delayed message needs and the oldest pending message cannot be flushed because bt mesh access send() returns -EBUSY or -ENOBUFS (all segmented-TX contexts busy, or advertising/segment buffers exhausted). A peer that is provisioned into the mesh network — holding a valid NetKey plus an AppKey or DevKey bound to a server model — can drive both conditions by flooding the victim with requests that elicit segmented responses while withholding the Segment Acknowledgment, which keeps the transmit contexts occupied while queued responses hold the chunk pool. Each further request that arrives in that window leaks one context.
Once the pool is drained, bt mesh delayable msg manage() returns -ENOMEM for every subsequent send and bt mesh model send() propagates that error with no fallback to an immediate transmit. Since CONFIG BT MESH ACCESS DELAYABLE MSG and CONFIG BT MESH ACCESS DELAYABLE MSG CTX ENABLED are both enabled by default, ctx->rnd delay is set for every received access message, so all replies from Configuration Server, Health Server and application server models are silently dropped. The node keeps receiving and processing traffic but never answers, a persistent denial of service until the device is restarted. There is no memory corruption, information disclosure or integrity impact; releases before the fix compute the chunk count from the transmit buffer capacity rather than its payload length, making chunk-pool starvation — and therefore the leak — considerably easier to provoke.

Correção

Missing Release of Resource after Effective Lifetime

Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾

Enumeração de Fraquezas

Identificadores relacionados

CVE-2026-19937

Produtos afetados

Zephyr