|
@@ -79,7 +79,10 @@ static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
|
|
|
|
|
|
static void rfcomm_process_connect(struct rfcomm_session *s);
|
|
|
|
|
|
-static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
|
|
|
+static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
|
|
|
+ bdaddr_t *dst,
|
|
|
+ u8 sec_level,
|
|
|
+ int *err);
|
|
|
static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
|
|
|
static void rfcomm_session_del(struct rfcomm_session *s);
|
|
|
|
|
@@ -401,7 +404,7 @@ static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst,
|
|
|
|
|
|
s = rfcomm_session_get(src, dst);
|
|
|
if (!s) {
|
|
|
- s = rfcomm_session_create(src, dst, &err);
|
|
|
+ s = rfcomm_session_create(src, dst, d->sec_level, &err);
|
|
|
if (!s)
|
|
|
return err;
|
|
|
}
|
|
@@ -679,7 +682,10 @@ static void rfcomm_session_close(struct rfcomm_session *s, int err)
|
|
|
rfcomm_session_put(s);
|
|
|
}
|
|
|
|
|
|
-static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
|
|
|
+static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
|
|
|
+ bdaddr_t *dst,
|
|
|
+ u8 sec_level,
|
|
|
+ int *err)
|
|
|
{
|
|
|
struct rfcomm_session *s = NULL;
|
|
|
struct sockaddr_l2 addr;
|
|
@@ -704,6 +710,7 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst
|
|
|
sk = sock->sk;
|
|
|
lock_sock(sk);
|
|
|
l2cap_pi(sk)->imtu = l2cap_mtu;
|
|
|
+ l2cap_pi(sk)->sec_level = sec_level;
|
|
|
if (l2cap_ertm)
|
|
|
l2cap_pi(sk)->mode = L2CAP_MODE_ERTM;
|
|
|
release_sock(sk);
|