Bluetooth: Check that remote supports A2MP before creating channel
Before attempting to create a channel directly on an AMP check
that the remote device supports A2MP signalling before starting
the physical link creation process.
Change-Id: Iac2bcebf9630368685e24e636e39ffa82651705d
Signed-off-by: Peter Krystad <pkrystad@codeaurora.org>
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index c21eb88..7ca920e 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -738,8 +738,10 @@
if (l2cap_check_security(sk) && __l2cap_no_conn_pending(sk)) {
l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
- if (l2cap_pi(sk)->amp_pref == BT_AMP_POLICY_PREFER_AMP)
- amp_create_physical(l2cap_pi(sk)->conn, sk);
+ if (l2cap_pi(sk)->amp_pref ==
+ BT_AMP_POLICY_PREFER_AMP &&
+ conn->fc_mask & L2CAP_FC_A2MP)
+ amp_create_physical(conn, sk);
else
l2cap_send_conn_req(sk);
}
@@ -843,8 +845,10 @@
l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
- if (l2cap_pi(sk)->amp_pref == BT_AMP_POLICY_PREFER_AMP)
- amp_create_physical(l2cap_pi(sk)->conn, sk);
+ if (l2cap_pi(sk)->amp_pref ==
+ BT_AMP_POLICY_PREFER_AMP &&
+ conn->fc_mask & L2CAP_FC_A2MP)
+ amp_create_physical(conn, sk);
else
l2cap_send_conn_req(sk);
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 7694764..361c984 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -761,8 +761,7 @@
BT_DBG("BT_AMP_POLICY now %d", opt);
if ((sk->sk_state == BT_CONNECTED) &&
- (l2cap_pi(sk)->amp_move_role == L2CAP_AMP_MOVE_NONE) &&
- (l2cap_pi(sk)->conn->fc_mask & L2CAP_FC_A2MP))
+ (l2cap_pi(sk)->amp_move_role == L2CAP_AMP_MOVE_NONE))
l2cap_amp_move_init(sk);
break;