From 6a93c415c2f58988d16fb08c35af471693add381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rymanowski?= Date: Wed, 16 Jan 2019 20:11:59 +0100 Subject: [PATCH] nimble/ll: Fix encryption pause Patch: 479eceb5 nimble/ll: Fix handling LL_PAUSE_ENC_REQ was incorrect because the intention was to handle LL_PAUSE_ENC_RSP as a slave there. This patch fixes this but if moves handling it into ble_ll_ctrl.c. This fix regression on LL/SEC/SLA/BV-02-C --- nimble/controller/src/ble_ll_conn.c | 6 ------ nimble/controller/src/ble_ll_ctrl.c | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nimble/controller/src/ble_ll_conn.c b/nimble/controller/src/ble_ll_conn.c index 992b6ab79..b6561a7d6 100644 --- a/nimble/controller/src/ble_ll_conn.c +++ b/nimble/controller/src/ble_ll_conn.c @@ -3989,12 +3989,6 @@ chk_rx_terminate_ind: } else { /* A slave always replies */ reply = 1; -#if MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION) - if (is_ctrl && (opcode == BLE_LL_CTRL_PAUSE_ENC_REQ) - && (rx_pyld_len == (1 + BLE_LL_CTRL_PAUSE_ENC_REQ_LEN))) { - connsm->enc_data.enc_state = CONN_ENC_S_PAUSED; - } -#endif } } diff --git a/nimble/controller/src/ble_ll_ctrl.c b/nimble/controller/src/ble_ll_ctrl.c index 26cece9d3..781987cfa 100644 --- a/nimble/controller/src/ble_ll_ctrl.c +++ b/nimble/controller/src/ble_ll_ctrl.c @@ -1359,6 +1359,12 @@ ble_ll_ctrl_rx_pause_enc_rsp(struct ble_ll_conn_sm *connsm) if (connsm->conn_role == BLE_LL_CONN_ROLE_MASTER) { rc = BLE_LL_CTRL_PAUSE_ENC_RSP; + } else if (connsm->enc_data.enc_state == CONN_ENC_S_PAUSE_ENC_RSP_WAIT) { + /* Master sends back unencrypted LL_PAUSE_ENC_RSP. + * From this moment encryption is paused. + */ + rc = BLE_ERR_MAX; + connsm->enc_data.enc_state = CONN_ENC_S_PAUSED; } else { rc = BLE_LL_CTRL_UNKNOWN_RSP; }