diff --git a/CHANGELOG.md b/CHANGELOG.md index 096578531..c5e77fb89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - GAP: simulate HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE if HCI Remote Name Request fails ### Fixed +- GAP: store link key for standard/non-SSP pairing ### Changed diff --git a/src/hci.c b/src/hci.c index e60442409..0bdbaba5d 100644 --- a/src/hci.c +++ b/src/hci.c @@ -4042,9 +4042,11 @@ static void event_handler(uint8_t *packet, uint16_t size){ if (hci_stack->bondable == false) break; // - if at least one side requests bonding during the IO Capabilities exchange. // Note: we drop bonding flag in acceptor role if remote doesn't request it - bool bonding_local = conn->io_cap_request_auth_req >= SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING; - bool bonding_remote = conn->io_cap_response_auth_req >= SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING; - if ((bonding_local == false) && (bonding_remote == false)) break; + if (conn->link_key_type != COMBINATION_KEY) { + bool bonding_local = conn->io_cap_request_auth_req >= SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING; + bool bonding_remote = conn->io_cap_response_auth_req >= SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING; + if ((bonding_local == false) && (bonding_remote == false)) break; + } // - if security level sufficient if (gap_security_level_for_link_key_type(link_key_type) < conn->requested_security_level) break; gap_store_link_key_for_bd_addr(addr, &packet[8], conn->link_key_type);