Commit 4c52d3d3 authored by John W. Linville's avatar John W. Linville
parents 8a7d7cbf 4c02e2d4
...@@ -249,12 +249,12 @@ static void hci_conn_disconnect(struct hci_conn *conn) ...@@ -249,12 +249,12 @@ static void hci_conn_disconnect(struct hci_conn *conn)
__u8 reason = hci_proto_disconn_ind(conn); __u8 reason = hci_proto_disconn_ind(conn);
switch (conn->type) { switch (conn->type) {
case ACL_LINK:
hci_acl_disconn(conn, reason);
break;
case AMP_LINK: case AMP_LINK:
hci_amp_disconn(conn, reason); hci_amp_disconn(conn, reason);
break; break;
default:
hci_acl_disconn(conn, reason);
break;
} }
} }
......
...@@ -859,6 +859,19 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb) ...@@ -859,6 +859,19 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
skb_pull(skb, sizeof(code)); skb_pull(skb, sizeof(code));
/*
* The SMP context must be initialized for all other PDUs except
* pairing and security requests. If we get any other PDU when
* not initialized simply disconnect (done if this function
* returns an error).
*/
if (code != SMP_CMD_PAIRING_REQ && code != SMP_CMD_SECURITY_REQ &&
!conn->smp_chan) {
BT_ERR("Unexpected SMP command 0x%02x. Disconnecting.", code);
kfree_skb(skb);
return -ENOTSUPP;
}
switch (code) { switch (code) {
case SMP_CMD_PAIRING_REQ: case SMP_CMD_PAIRING_REQ:
reason = smp_cmd_pairing_req(conn, skb); reason = smp_cmd_pairing_req(conn, skb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment