|
@@ -859,6 +859,19 @@ int smp_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
|
|
|
|
|
|
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) {
|
|
|
case SMP_CMD_PAIRING_REQ:
|
|
|
reason = smp_cmd_pairing_req(conn, skb);
|