summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnderson Briglia <anderson.briglia@openbossa.org>2011-06-07 18:46:31 -0300
committerGustavo F. Padovan <padovan@profusion.mobi>2011-06-13 15:47:04 -0300
commitb501d6a1dc21eb61cbbc54e40780084f5d517164 (patch)
tree0b431362a20681dc67bc4a0283cdc60fcfe62cd0
parenteb492e0169974ac6d168f11d1fc1e2753fe1f3b4 (diff)
downloadop-kernel-dev-b501d6a1dc21eb61cbbc54e40780084f5d517164.zip
op-kernel-dev-b501d6a1dc21eb61cbbc54e40780084f5d517164.tar.gz
Bluetooth: Start SMP procedure
Start SMP procedure for LE connections. This modification intercepts l2cap received frames and call proper SMP functions to start the SMP procedure. By now, no keys are being used. Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@openbossa.org> Signed-off-by: Anderson Briglia <anderson.briglia@openbossa.org> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
-rw-r--r--net/bluetooth/l2cap_core.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index cb68b27..8657165 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -54,6 +54,7 @@
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>
+#include <net/bluetooth/smp.h>
int disable_ertm;
@@ -909,12 +910,15 @@ static void l2cap_conn_ready(struct l2cap_conn *conn)
__clear_chan_timer(chan);
l2cap_state_change(chan, BT_CONNECTED);
sk->sk_state_change(sk);
+ if (smp_conn_security(conn, chan->sec_level))
+ BT_DBG("Insufficient security");
}
if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
__clear_chan_timer(chan);
l2cap_state_change(chan, BT_CONNECTED);
sk->sk_state_change(sk);
+
} else if (chan->state == BT_CONNECT)
l2cap_do_start(chan);
@@ -4060,6 +4064,11 @@ static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
l2cap_att_channel(conn, cid, skb);
break;
+ case L2CAP_CID_SMP:
+ if (smp_sig_channel(conn, skb))
+ l2cap_conn_del(conn->hcon, EACCES);
+ break;
+
default:
l2cap_data_channel(conn, cid, skb);
break;
OpenPOWER on IntegriCloud