Bluetooth: controller: Fix start encryption in progress check

Fix check in start encryption to disallow new encryption
setup while there is one already in progress.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada
2019-09-06 12:00:46 +05:30
parent 560d6ddb96
commit 120eba45f8

View File

@@ -12093,7 +12093,9 @@ u8_t ll_enc_req_send(u16_t handle, u8_t *rand, u8_t *ediv, u8_t *ltk)
return BT_HCI_ERR_UNKNOWN_CONN_ID;
}
if (conn->llcp_enc.req != conn->llcp_enc.ack) {
if ((conn->llcp_enc.req != conn->llcp_enc.ack) ||
((conn->llcp_req != conn->llcp_ack) &&
(conn->llcp_type == LLCP_ENCRYPTION))) {
return BT_HCI_ERR_CMD_DISALLOWED;
}
@@ -12105,7 +12107,7 @@ u8_t ll_enc_req_send(u16_t handle, u8_t *rand, u8_t *ediv, u8_t *ltk)
memcpy(&conn->llcp_enc.ltk[0], ltk, sizeof(conn->llcp_enc.ltk));
if ((conn->enc_rx == 0) && (conn->enc_tx == 0)) {
if (!conn->enc_rx && !conn->enc_tx) {
struct pdu_data_llctrl_enc_req *enc_req;
pdu_data_tx->ll_id = PDU_DATA_LLID_CTRL;
@@ -12121,7 +12123,7 @@ u8_t ll_enc_req_send(u16_t handle, u8_t *rand, u8_t *ediv, u8_t *ltk)
enc_req->ediv[1] = ediv[1];
bt_rand(enc_req->skdm, sizeof(enc_req->skdm));
bt_rand(enc_req->ivm, sizeof(enc_req->ivm));
} else if ((conn->enc_rx != 0) && (conn->enc_tx != 0)) {
} else if (conn->enc_rx && conn->enc_tx) {
memcpy(&conn->llcp_enc.rand[0], rand,
sizeof(conn->llcp_enc.rand));