aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnderson Briglia <anderson.briglia@openbossa.org>2011-06-07 18:46:31 -0300
committerJaikumar Ganesh <jaikumar@google.com>2011-07-11 11:59:20 -0700
commitea370126950d9d8931d323d6e61a3d76d291f466 (patch)
tree415166330a54592046606bed73c1d876fd561c85
parent133e14c158da76cd047f592fb08b9619d746fd09 (diff)
downloadkernel_samsung_tuna-ea370126950d9d8931d323d6e61a3d76d291f466.zip
kernel_samsung_tuna-ea370126950d9d8931d323d6e61a3d76d291f466.tar.gz
kernel_samsung_tuna-ea370126950d9d8931d323d6e61a3d76d291f466.tar.bz2
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 2250217..2d7c6b1 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;
@@ -910,12 +911,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);
@@ -4061,6 +4065,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;