diff options
Diffstat (limited to 'net/bluetooth/l2cap_sock.c')
| -rw-r--r-- | net/bluetooth/l2cap_sock.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index f1b1edd0b697..c99d65ef13b1 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -179,9 +179,17 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,  	struct l2cap_chan *chan = l2cap_pi(sk)->chan;  	struct sockaddr_l2 la;  	int len, err = 0; +	bool zapped;  	BT_DBG("sk %p", sk); +	lock_sock(sk); +	zapped = sock_flag(sk, SOCK_ZAPPED); +	release_sock(sk); + +	if (zapped) +		return -EINVAL; +  	if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||  	    addr->sa_family != AF_BLUETOOTH)  		return -EINVAL;  |