|
@@ -853,6 +853,7 @@ static struct proto l2cap_proto = {
|
|
struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
|
|
struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
|
|
{
|
|
{
|
|
struct sock *sk;
|
|
struct sock *sk;
|
|
|
|
+ struct l2cap_chan *chan;
|
|
|
|
|
|
sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
|
|
sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
|
|
if (!sk)
|
|
if (!sk)
|
|
@@ -869,6 +870,14 @@ struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, g
|
|
sk->sk_protocol = proto;
|
|
sk->sk_protocol = proto;
|
|
sk->sk_state = BT_OPEN;
|
|
sk->sk_state = BT_OPEN;
|
|
|
|
|
|
|
|
+ chan = l2cap_chan_create(sk);
|
|
|
|
+ if (!chan) {
|
|
|
|
+ l2cap_sock_kill(sk);
|
|
|
|
+ return NULL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ l2cap_pi(sk)->chan = chan;
|
|
|
|
+
|
|
return sk;
|
|
return sk;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -876,7 +885,6 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
|
|
int kern)
|
|
int kern)
|
|
{
|
|
{
|
|
struct sock *sk;
|
|
struct sock *sk;
|
|
- struct l2cap_chan *chan;
|
|
|
|
|
|
|
|
BT_DBG("sock %p", sock);
|
|
BT_DBG("sock %p", sock);
|
|
|
|
|
|
@@ -895,14 +903,6 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
|
|
if (!sk)
|
|
if (!sk)
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
- chan = l2cap_chan_create(sk);
|
|
|
|
- if (!chan) {
|
|
|
|
- l2cap_sock_kill(sk);
|
|
|
|
- return -ENOMEM;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- l2cap_pi(sk)->chan = chan;
|
|
|
|
-
|
|
|
|
l2cap_sock_init(sk, NULL);
|
|
l2cap_sock_init(sk, NULL);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|