diff options
Diffstat (limited to 'net/bluetooth/smp.c')
| -rw-r--r-- | net/bluetooth/smp.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index 16ef0dc85a0..8c225ef349c 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c @@ -267,10 +267,10 @@ static void smp_failure(struct l2cap_conn *conn, u8 reason, u8 send)  	mgmt_auth_failed(conn->hcon->hdev, conn->dst, hcon->type,  			 hcon->dst_type, reason); -	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) { -		cancel_delayed_work_sync(&conn->security_timer); +	cancel_delayed_work_sync(&conn->security_timer); + +	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))  		smp_chan_destroy(conn); -	}  }  #define JUST_WORKS	0x00 @@ -579,8 +579,11 @@ static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)  	if (!test_and_set_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags))  		smp = smp_chan_create(conn); +	else +		smp = conn->smp_chan; -	smp = conn->smp_chan; +	if (!smp) +		return SMP_UNSPECIFIED;  	smp->preq[0] = SMP_CMD_PAIRING_REQ;  	memcpy(&smp->preq[1], req, sizeof(*req)); @@ -757,9 +760,9 @@ static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)  	return 0;  } -int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level) +int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)  { -	struct hci_conn *hcon = conn->hcon; +	struct l2cap_conn *conn = hcon->l2cap_data;  	struct smp_chan *smp = conn->smp_chan;  	__u8 authreq;  |