OSDN Git Service

Fix bad address type assumption
authorJakub Pawlowski <jpawlowski@google.com>
Fri, 16 Sep 2016 15:03:16 +0000 (08:03 -0700)
committerAndre Eisenbach <eisenbach@google.com>
Fri, 16 Sep 2016 19:57:49 +0000 (19:57 +0000)
LE related code should not use BTM_ACL_IS_CONNECTED, because it assumes
classic transport.

In this particular case, connection created event, which was result of
advertising, caused cancellation of "LE Create Connection".
Attempt to send "LE Create Connection Cancel" was checking if connection
is already established, but was failing to do so becuase
BTM_ACL_IS_CONNECTED was used instead of btm_bda_to_acl with proper
transport. This caused just created connection to be dropped.

Bug: 31442085
Change-Id: Ia345a3d00e8567160f4abb2a31c4130ee69d67a3
(cherry picked from commit f5566938ba671329d91c84c30ab126fbcdfc16d7)

stack/l2cap/l2c_ble.c

index 0f7eda6..aa7cef4 100644 (file)
@@ -76,7 +76,7 @@ BOOLEAN L2CA_CancelBleConnectReq (BD_ADDR rem_bda)
         p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_LE);
         /* Do not remove lcb if an LE link is already up as a peripheral */
         if (p_lcb != NULL &&
-            !(p_lcb->link_role == HCI_ROLE_SLAVE && BTM_ACL_IS_CONNECTED(rem_bda)))
+            !(p_lcb->link_role == HCI_ROLE_SLAVE && btm_bda_to_acl(rem_bda, BT_TRANSPORT_LE) != NULL))
         {
             p_lcb->disc_reason = L2CAP_CONN_CANCEL;
             l2cu_release_lcb (p_lcb);