From: Anderson Briglia <anderson.briglia@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> Signed-off-by: Anderson Briglia <anderson.briglia@xxxxxxxxxxxxx> --- net/bluetooth/l2cap_core.c | 7 +++++++ net/bluetooth/smp.c | 2 +- 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 0d168aa..8ee2bd5 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> #define VERSION "2.15" @@ -642,6 +643,8 @@ static void l2cap_conn_ready(struct l2cap_conn *conn) l2cap_sock_clear_timer(sk); sk->sk_state = BT_CONNECTED; sk->sk_state_change(sk); + if (smp_conn_security(conn, l2cap_pi(sk)->sec_level)) + BT_DBG("Insufficient security"); } if (sk->sk_type != SOCK_SEQPACKET && @@ -4620,6 +4623,10 @@ static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb) l2cap_conless_channel(conn, psm, skb); break; + case L2CAP_CID_SMP: + smp_sig_channel(conn, skb); + break; + default: l2cap_data_channel(conn, cid, skb); break; diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index e427d11..e9dde5f 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c @@ -86,7 +86,7 @@ int smp_conn_security(struct l2cap_conn *conn, __u8 sec_level) return 1; } - if (conn->hcon->link_mode & HCI_LM_MASTER) { + if (conn->hcon->out) { struct smp_cmd_pairing cp; cp.io_capability = 0x00; cp.oob_flag = 0x00; -- 1.7.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html