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)