Commit 05558911 authored by Gustavo F. Padovan's avatar Gustavo F. Padovan

Merge master.kernel.org:/pub/scm/linux/kernel/git/padovan/bluetooth-2.6

Conflicts:
	net/bluetooth/l2cap_core.c
parents e13e21dc 33060542
...@@ -670,11 +670,11 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type) ...@@ -670,11 +670,11 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
goto encrypt; goto encrypt;
auth: auth:
if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
return 0; return 0;
hci_conn_auth(conn, sec_level, auth_type); if (!hci_conn_auth(conn, sec_level, auth_type))
return 0; return 0;
encrypt: encrypt:
if (conn->link_mode & HCI_LM_ENCRYPT) if (conn->link_mode & HCI_LM_ENCRYPT)
......
...@@ -4212,21 +4212,30 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) ...@@ -4212,21 +4212,30 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
} }
} else if (chan->state == BT_CONNECT2) { } else if (chan->state == BT_CONNECT2) {
struct l2cap_conn_rsp rsp; struct l2cap_conn_rsp rsp;
__u16 result; __u16 res, stat;
if (!status) { if (!status) {
l2cap_state_change(chan, BT_CONFIG); if (bt_sk(sk)->defer_setup) {
result = L2CAP_CR_SUCCESS; struct sock *parent = bt_sk(sk)->parent;
res = L2CAP_CR_PEND;
stat = L2CAP_CS_AUTHOR_PEND;
parent->sk_data_ready(parent, 0);
} else {
l2cap_state_change(chan, BT_CONFIG);
res = L2CAP_CR_SUCCESS;
stat = L2CAP_CS_NO_INFO;
}
} else { } else {
l2cap_state_change(chan, BT_DISCONN); l2cap_state_change(chan, BT_DISCONN);
__set_chan_timer(chan, HZ / 10); __set_chan_timer(chan, HZ / 10);
result = L2CAP_CR_SEC_BLOCK; res = L2CAP_CR_SEC_BLOCK;
stat = L2CAP_CS_NO_INFO;
} }
rsp.scid = cpu_to_le16(chan->dcid); rsp.scid = cpu_to_le16(chan->dcid);
rsp.dcid = cpu_to_le16(chan->scid); rsp.dcid = cpu_to_le16(chan->scid);
rsp.result = cpu_to_le16(result); rsp.result = cpu_to_le16(res);
rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO); rsp.status = cpu_to_le16(stat);
l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
sizeof(rsp), &rsp); sizeof(rsp), &rsp);
} }
...@@ -4365,7 +4374,7 @@ static int l2cap_debugfs_show(struct seq_file *f, void *p) ...@@ -4365,7 +4374,7 @@ static int l2cap_debugfs_show(struct seq_file *f, void *p)
c->state, __le16_to_cpu(c->psm), c->state, __le16_to_cpu(c->psm),
c->scid, c->dcid, c->imtu, c->omtu, c->scid, c->dcid, c->imtu, c->omtu,
c->sec_level, c->mode); c->sec_level, c->mode);
} }
read_unlock_bh(&chan_list_lock); read_unlock_bh(&chan_list_lock);
......
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