summaryrefslogtreecommitdiff
path: root/net/bluetooth/l2cap_core.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2012-07-11 12:50:20 +0200
committerArnd Bergmann <arnd@arndb.de>2012-07-11 12:50:20 +0200
commit0dc19510430b20b3b2d6d1b9b796fd42fa2af64a (patch)
treea512cf400d74d72272ce6cf5c4d782538213d433 /net/bluetooth/l2cap_core.c
parentb52a2c472d7fcf215e31dffdd382651e1b99f138 (diff)
parentbd0a521e88aa7a06ae7aabaed7ae196ed4ad867a (diff)
downloadolio-linux-3.10-0dc19510430b20b3b2d6d1b9b796fd42fa2af64a.tar.xz
olio-linux-3.10-0dc19510430b20b3b2d6d1b9b796fd42fa2af64a.zip
Merge tag 'v3.5-rc6' into next/soc
Linux 3.5-rc6 Dependency for imx/soc changes
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
-rw-r--r--net/bluetooth/l2cap_core.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 24f144b72a9..4554e80d16a 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1295,7 +1295,12 @@ static void security_timeout(struct work_struct *work)
struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
security_timer.work);
- l2cap_conn_del(conn->hcon, ETIMEDOUT);
+ BT_DBG("conn %p", conn);
+
+ if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
+ smp_chan_destroy(conn);
+ l2cap_conn_del(conn->hcon, ETIMEDOUT);
+ }
}
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
@@ -2910,12 +2915,14 @@ static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
while (len >= L2CAP_CONF_OPT_SIZE) {
len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
- switch (type) {
- case L2CAP_CONF_RFC:
- if (olen == sizeof(rfc))
- memcpy(&rfc, (void *)val, olen);
- goto done;
- }
+ if (type != L2CAP_CONF_RFC)
+ continue;
+
+ if (olen != sizeof(rfc))
+ break;
+
+ memcpy(&rfc, (void *)val, olen);
+ goto done;
}
/* Use sane default values in case a misbehaving remote device