This is an automated email from the ASF dual-hosted git repository. andk pushed a commit to branch hci-length-fix in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit 231c35653e30c575d86e45a58b4dccaf90ff868d Author: Andrzej Kaczmarek <[email protected]> AuthorDate: Mon Feb 3 18:52:31 2025 +0100 nimble/transport: Fix ISO HCI length parsing Length in ISO HCI packets is 14 bits. --- nimble/include/nimble/hci_common.h | 2 +- nimble/transport/common/hci_h4/src/hci_h4.c | 2 +- nimble/transport/nrf5340/src/nrf5340_ble_hci.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/nimble/include/nimble/hci_common.h b/nimble/include/nimble/hci_common.h index 6d9ba85db..96573da60 100644 --- a/nimble/include/nimble/hci_common.h +++ b/nimble/include/nimble/hci_common.h @@ -2426,7 +2426,7 @@ struct hci_data_hdr #define BLE_HCI_ISO_CONN_HANDLE_MASK (0x07ff) #define BLE_HCI_ISO_PB_FLAG_MASK (0x3000) #define BLE_HCI_ISO_TS_FLAG_MASK (0x4000) -#define BLE_HCI_ISO_LENGTH_MASK (0x7fff) +#define BLE_HCI_ISO_LENGTH_MASK (0x3fff) #define BLE_HCI_ISO_SDU_LENGTH_MASK (0x0fff) #define BLE_HCI_ISO_PKT_STATUS_FLAG_MASK (0xC000) diff --git a/nimble/transport/common/hci_h4/src/hci_h4.c b/nimble/transport/common/hci_h4/src/hci_h4.c index e787bf5ef..9af046ab6 100644 --- a/nimble/transport/common/hci_h4/src/hci_h4.c +++ b/nimble/transport/common/hci_h4/src/hci_h4.c @@ -177,7 +177,7 @@ hci_h4_sm_w4_header(struct hci_h4_sm *h4sm, struct hci_h4_input_buffer *ib) } os_mbuf_append(h4sm->om, h4sm->hdr, h4sm->len); - h4sm->exp_len = (get_le16(&h4sm->hdr[2]) & 0x7fff) + 4; + h4sm->exp_len = BLE_HCI_ISO_LENGTH(get_le16(&h4sm->hdr[2])) + 4; break; default: assert(0); diff --git a/nimble/transport/nrf5340/src/nrf5340_ble_hci.c b/nimble/transport/nrf5340/src/nrf5340_ble_hci.c index 679cfb124..f73be0552 100644 --- a/nimble/transport/nrf5340/src/nrf5340_ble_hci.c +++ b/nimble/transport/nrf5340/src/nrf5340_ble_hci.c @@ -23,6 +23,7 @@ #include <sysinit/sysinit.h> #include <nimble/ble.h> #include <ipc_nrf5340/ipc_nrf5340.h> +#include <nimble/hci_common.h> #include <nimble/transport.h> #include <nimble/transport/hci_ipc.h> @@ -86,7 +87,7 @@ nrf5340_ble_hci_iso_tx(struct os_mbuf *om) int rc; hdr.type = HCI_IPC_TYPE_ISO; - hdr.length = 4 + get_le16(&om->om_data[2]); + hdr.length = 4 + BLE_HCI_ISO_LENGTH(get_le16(&om->om_data[2])); rc = ipc_nrf5340_write(IPC_TX_CHANNEL, &hdr, sizeof(hdr), false); if (rc == 0) {
