|
@@ -1623,24 +1623,26 @@ static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
|
|
|
if (!cp)
|
|
|
return;
|
|
|
|
|
|
- hci_dev_lock(hdev);
|
|
|
+ if (status) {
|
|
|
+ hci_dev_lock(hdev);
|
|
|
|
|
|
- conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
|
|
|
+ conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
|
|
|
+ if (!conn) {
|
|
|
+ hci_dev_unlock(hdev);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
|
|
|
- conn);
|
|
|
+ BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
|
|
|
+ conn);
|
|
|
|
|
|
- if (status) {
|
|
|
- if (conn && conn->state == BT_CONNECT) {
|
|
|
- conn->state = BT_CLOSED;
|
|
|
- mgmt_connect_failed(hdev, &cp->peer_addr, conn->type,
|
|
|
- conn->dst_type, status);
|
|
|
- hci_proto_connect_cfm(conn, status);
|
|
|
- hci_conn_del(conn);
|
|
|
- }
|
|
|
- }
|
|
|
+ conn->state = BT_CLOSED;
|
|
|
+ mgmt_connect_failed(hdev, &cp->peer_addr, conn->type,
|
|
|
+ conn->dst_type, status);
|
|
|
+ hci_proto_connect_cfm(conn, status);
|
|
|
+ hci_conn_del(conn);
|
|
|
|
|
|
- hci_dev_unlock(hdev);
|
|
|
+ hci_dev_unlock(hdev);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
|