diff --git a/subsys/bluetooth/controller/hci/hci.c b/subsys/bluetooth/controller/hci/hci.c index 2c51f50b828e5e..997ed7164aa5f9 100644 --- a/subsys/bluetooth/controller/hci/hci.c +++ b/subsys/bluetooth/controller/hci/hci.c @@ -2336,11 +2336,24 @@ int hci_acl_handle(struct net_buf *buf, struct net_buf **evt) pdu_data = (void *)node_tx->pdu; - if (flags == BT_ACL_START_NO_FLUSH || flags == BT_ACL_START) { + if (bt_acl_flags_bc(flags) != BT_ACL_POINT_TO_POINT) { + return -EINVAL; + } + + switch (bt_acl_flags_pb(flags)) { + case BT_ACL_START_NO_FLUSH: pdu_data->ll_id = PDU_DATA_LLID_DATA_START; - } else { + break; + case BT_ACL_CONT: pdu_data->ll_id = PDU_DATA_LLID_DATA_CONTINUE; + break; + default: + /* BT_ACL_START and BT_ACL_COMPLETE not allowed on LE-U + * from Host to Controller + */ + return -EINVAL; } + pdu_data->len = len; memcpy(&pdu_data->lldata[0], buf->data, len); diff --git a/subsys/bluetooth/host/conn.c b/subsys/bluetooth/host/conn.c index 667cf3f824d630..693be1cf098eb1 100644 --- a/subsys/bluetooth/host/conn.c +++ b/subsys/bluetooth/host/conn.c @@ -1206,6 +1206,10 @@ void bt_conn_recv(struct bt_conn *conn, struct net_buf *buf, u8_t flags) break; default: + /* BT_ACL_START_NO_FLUSH and BT_ACL_COMPLETE are not allowed on + * LE-U from Controller to Host. + * Only BT_ACL_POINT_TO_POINT is supported. + */ BT_ERR("Unexpected ACL flags (0x%02x)", flags); bt_conn_reset_rx_state(conn); net_buf_unref(buf);