CVE-2026-78117 in Zephyr
Zusammenfassung
von VulDB • 21.10.2026
Der Infineon PSOC 6 BLESS HCI-Treiber in `drivers/bluetooth/hci/hci_infineon_psoc6_bless.c` speichert den Deskriptor für ausgehende HCI-Pakete in einer Variablen mit Dateigültigkeit, nämlich `static cy_stc_ble_hci_tx_packet_info_t hci_tx_pkt`. Die Funktion `psoc6_bless_send()` löscht und füllt die Felder `packetType`, `dataLength` und `data` dieses Deskriptors, bevor sie das Semaphor `psoc6_bless_operation_sem` erwirbt. Dadurch schützt der serialisierende Semaphore des Treibers nur den Aufruf von `Cy_BLE_SoftHciSendAppPkt()`, nicht jedoch den gemeinsam genutzten Zustand, auf den dieser Aufruf zugreift.
Der Bluetooth-Host garantiert keinen einzelnen HCI-Sender. Die meisten Übertragungen werden über die kooperative TX-Prozessor-Arbeitswarteschlange geleitet, aber `bt_hci_cmd_send()` umgeht absichtlich `bt_dev.cmd_tx_queue` für `BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS` und ruft `bt_send()` direkt aus dem Thread des Aufrufers auf; dieser Aufrufer ist `bt_hci_host_num_completed_packets()`, die Destroy-Callback-Funktion von `acl_in_pool`, die in jenem Thread ausgeführt wird, der den letzten Verweis auf einen empfangenen ACL-Puffer freigibt. Bei Boards mit diesem Treiber ist `CONFIG_BT_HCI_ACL_FLOW_CONTROL` standardmäßig auf „y“ (aktiviert) gesetzt, und eine Anwendung, die aus ihrer L2CAP-Recv-Callback-Funktion `-EINPROGRESS` zurückgibt und später `bt_l2cap_chan_recv_complete()` aufruft, führt diese Freigabe von ihrem eigenen präemptiven Thread durch. Ein entfernter Peer, der Bluetooth-Datenverkehr parallel zu den Übertragungen des Geräts generiert, erhöht die Kollisionsrate.
Wenn sich zwei Sender überlagern (interleaving), kann der Inhaber des Semaphors dem Controller einen Deskriptor übergeben, dessen `dataLength` aus einem `net_buf` stammt und dessen Datenzeiger (`data pointer`) von einem anderen – oder dessen Puffer bereits an seinen Pool zurückgegeben wurde. Der Controller kopiert dann bis zu eine vollständige HCI/ACL-Nutzlast ab einem kürzeren oder wiederverwendeten Puffer und überträgt diese, wodurch benachbarte RAM-Inhalte mit dem verbundenen Peer offengelegt werden; andere Überlagerungen duplizieren einen HCI-Paket und verwerfen ein anderes stillschweigend, was die Verbindung stört. Da der Treiber nur durch den gemeinsamen Deskriptor liest, kommt es zu keiner Speicherkorruption oder einem Write-Primitive, und die offenlegten Bytes sind nicht vom Angreifer gewählt. Die Korrektur macht den Deskriptor zu einer lokalen Variablen in `psoc6_bless_send()`, wodurch der gemeinsam genutzte Zustand entfernt wird; `Cy_BLE_SoftHciSendAppPkt()` kopiert das Paket vor seiner Rückgabe, sodass es die Lebensdauer des Aufrufs nicht überschreiten muss.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.