From b9a8682d7815812046d2d4d4c2fcebd3d0a7bffc Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Fri, 6 Sep 2019 10:39:26 +0530 Subject: [PATCH] Bluetooth: controller: split: Fix Re-encryption procedure Fix MIC failure on re-encryption procedure when responding at the same time to peer initiated feature request. Relates to commit 560d6ddb964c ("Bluetooth: controller: Fix Re-encryption procedure"). Signed-off-by: Vinayak Kariappa Chettimada --- subsys/bluetooth/controller/ll_sw/ull_conn.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn.c b/subsys/bluetooth/controller/ll_sw/ull_conn.c index 61065f2a988..514267cb636 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn.c +++ b/subsys/bluetooth/controller/ll_sw/ull_conn.c @@ -1244,8 +1244,10 @@ static struct node_tx *tx_ull_dequeue(struct ll_conn *conn, pdu_data_tx = (void *)conn->tx_head->pdu; if ((pdu_data_tx->ll_id != PDU_DATA_LLID_CTRL) || - (pdu_data_tx->llctrl.opcode != - PDU_DATA_LLCTRL_TYPE_ENC_REQ)) { + ((pdu_data_tx->llctrl.opcode != + PDU_DATA_LLCTRL_TYPE_ENC_REQ) && + (pdu_data_tx->llctrl.opcode != + PDU_DATA_LLCTRL_TYPE_PAUSE_ENC_REQ))) { conn->tx_ctrl = conn->tx_ctrl_last = conn->tx_head; } } @@ -1903,7 +1905,10 @@ static bool is_enc_req_pause_tx(struct ll_conn *conn) pdu_data_tx = (void *)conn->tx_head->pdu; if ((pdu_data_tx->ll_id == PDU_DATA_LLID_CTRL) && - (pdu_data_tx->llctrl.opcode == PDU_DATA_LLCTRL_TYPE_ENC_REQ)) { + ((pdu_data_tx->llctrl.opcode == + PDU_DATA_LLCTRL_TYPE_ENC_REQ) || + (pdu_data_tx->llctrl.opcode == + PDU_DATA_LLCTRL_TYPE_PAUSE_ENC_REQ))) { if (((conn->llcp_req != conn->llcp_ack) && (conn->llcp_type != LLCP_ENCRYPTION)) || ((conn->llcp_req == conn->llcp_ack) && @@ -4790,6 +4795,9 @@ static inline void ctrl_tx_ack(struct ll_conn *conn, struct node_tx **tx, * going out, hence safe by design). */ conn->procedure_expire = conn->procedure_reload; + + /* Reset enc req queued state */ + conn->llcp_enc.ack = conn->llcp_enc.req; break; case PDU_DATA_LLCTRL_TYPE_PAUSE_ENC_RSP: