l2cap_sock.c revision 0ce43ce60d5e0c079d33be1fe33ba92828c7e5da
1/*
2   BlueZ - Bluetooth protocol stack for Linux
3   Copyright (C) 2000-2001 Qualcomm Incorporated
4   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5   Copyright (C) 2010 Google Inc.
6   Copyright (C) 2011 ProFUSION Embedded Systems
7
8   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9
10   This program is free software; you can redistribute it and/or modify
11   it under the terms of the GNU General Public License version 2 as
12   published by the Free Software Foundation;
13
14   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25   SOFTWARE IS DISCLAIMED.
26*/
27
28/* Bluetooth L2CAP sockets. */
29
30#include <linux/module.h>
31#include <linux/export.h>
32
33#include <net/bluetooth/bluetooth.h>
34#include <net/bluetooth/hci_core.h>
35#include <net/bluetooth/l2cap.h>
36
37#include "smp.h"
38
39bool enable_lecoc;
40
41static struct bt_sock_list l2cap_sk_list = {
42	.lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
43};
44
45static const struct proto_ops l2cap_sock_ops;
46static void l2cap_sock_init(struct sock *sk, struct sock *parent);
47static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
48				     int proto, gfp_t prio);
49
50bool l2cap_is_socket(struct socket *sock)
51{
52	return sock && sock->ops == &l2cap_sock_ops;
53}
54EXPORT_SYMBOL(l2cap_is_socket);
55
56static int l2cap_validate_bredr_psm(u16 psm)
57{
58	/* PSM must be odd and lsb of upper byte must be 0 */
59	if ((psm & 0x0101) != 0x0001)
60		return -EINVAL;
61
62	/* Restrict usage of well-known PSMs */
63	if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE))
64		return -EACCES;
65
66	return 0;
67}
68
69static int l2cap_validate_le_psm(u16 psm)
70{
71	/* Valid LE_PSM ranges are defined only until 0x00ff */
72	if (psm > 0x00ff)
73		return -EINVAL;
74
75	/* Restrict fixed, SIG assigned PSM values to CAP_NET_BIND_SERVICE */
76	if (psm <= 0x007f && !capable(CAP_NET_BIND_SERVICE))
77		return -EACCES;
78
79	return 0;
80}
81
82static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
83{
84	struct sock *sk = sock->sk;
85	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
86	struct sockaddr_l2 la;
87	int len, err = 0;
88
89	BT_DBG("sk %p", sk);
90
91	if (!addr || addr->sa_family != AF_BLUETOOTH)
92		return -EINVAL;
93
94	memset(&la, 0, sizeof(la));
95	len = min_t(unsigned int, sizeof(la), alen);
96	memcpy(&la, addr, len);
97
98	if (la.l2_cid && la.l2_psm)
99		return -EINVAL;
100
101	if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
102		return -EINVAL;
103
104	if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
105		if (!enable_lecoc && la.l2_psm)
106			return -EINVAL;
107		/* We only allow ATT user space socket */
108		if (la.l2_cid &&
109		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
110			return -EINVAL;
111	}
112
113	lock_sock(sk);
114
115	if (sk->sk_state != BT_OPEN) {
116		err = -EBADFD;
117		goto done;
118	}
119
120	if (la.l2_psm) {
121		__u16 psm = __le16_to_cpu(la.l2_psm);
122
123		if (la.l2_bdaddr_type == BDADDR_BREDR)
124			err = l2cap_validate_bredr_psm(psm);
125		else
126			err = l2cap_validate_le_psm(psm);
127
128		if (err)
129			goto done;
130	}
131
132	if (la.l2_cid)
133		err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
134	else
135		err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
136
137	if (err < 0)
138		goto done;
139
140	switch (chan->chan_type) {
141	case L2CAP_CHAN_CONN_LESS:
142		if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP)
143			chan->sec_level = BT_SECURITY_SDP;
144		break;
145	case L2CAP_CHAN_CONN_ORIENTED:
146		if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
147		    __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
148			chan->sec_level = BT_SECURITY_SDP;
149		break;
150	}
151
152	bacpy(&chan->src, &la.l2_bdaddr);
153	chan->src_type = la.l2_bdaddr_type;
154
155	if (chan->psm && bdaddr_type_is_le(chan->src_type))
156		chan->mode = L2CAP_MODE_LE_FLOWCTL;
157
158	chan->state = BT_BOUND;
159	sk->sk_state = BT_BOUND;
160
161done:
162	release_sock(sk);
163	return err;
164}
165
166static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
167			      int alen, int flags)
168{
169	struct sock *sk = sock->sk;
170	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
171	struct sockaddr_l2 la;
172	int len, err = 0;
173
174	BT_DBG("sk %p", sk);
175
176	if (!addr || alen < sizeof(addr->sa_family) ||
177	    addr->sa_family != AF_BLUETOOTH)
178		return -EINVAL;
179
180	memset(&la, 0, sizeof(la));
181	len = min_t(unsigned int, sizeof(la), alen);
182	memcpy(&la, addr, len);
183
184	if (la.l2_cid && la.l2_psm)
185		return -EINVAL;
186
187	if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
188		return -EINVAL;
189
190	/* Check that the socket wasn't bound to something that
191	 * conflicts with the address given to connect(). If chan->src
192	 * is BDADDR_ANY it means bind() was never used, in which case
193	 * chan->src_type and la.l2_bdaddr_type do not need to match.
194	 */
195	if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) &&
196	    bdaddr_type_is_le(la.l2_bdaddr_type)) {
197		/* Old user space versions will try to incorrectly bind
198		 * the ATT socket using BDADDR_BREDR. We need to accept
199		 * this and fix up the source address type only when
200		 * both the source CID and destination CID indicate
201		 * ATT. Anything else is an invalid combination.
202		 */
203		if (chan->scid != L2CAP_CID_ATT ||
204		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
205			return -EINVAL;
206
207		/* We don't have the hdev available here to make a
208		 * better decision on random vs public, but since all
209		 * user space versions that exhibit this issue anyway do
210		 * not support random local addresses assuming public
211		 * here is good enough.
212		 */
213		chan->src_type = BDADDR_LE_PUBLIC;
214	}
215
216	if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR)
217		return -EINVAL;
218
219	if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
220		if (!enable_lecoc && la.l2_psm)
221			return -EINVAL;
222		/* We only allow ATT user space socket */
223		if (la.l2_cid &&
224		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
225			return -EINVAL;
226	}
227
228	if (chan->psm && bdaddr_type_is_le(chan->src_type))
229		chan->mode = L2CAP_MODE_LE_FLOWCTL;
230
231	err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
232				 &la.l2_bdaddr, la.l2_bdaddr_type);
233	if (err)
234		return err;
235
236	lock_sock(sk);
237
238	err = bt_sock_wait_state(sk, BT_CONNECTED,
239				 sock_sndtimeo(sk, flags & O_NONBLOCK));
240
241	release_sock(sk);
242
243	return err;
244}
245
246static int l2cap_sock_listen(struct socket *sock, int backlog)
247{
248	struct sock *sk = sock->sk;
249	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
250	int err = 0;
251
252	BT_DBG("sk %p backlog %d", sk, backlog);
253
254	lock_sock(sk);
255
256	if (sk->sk_state != BT_BOUND) {
257		err = -EBADFD;
258		goto done;
259	}
260
261	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
262		err = -EINVAL;
263		goto done;
264	}
265
266	switch (chan->mode) {
267	case L2CAP_MODE_BASIC:
268	case L2CAP_MODE_LE_FLOWCTL:
269		break;
270	case L2CAP_MODE_ERTM:
271	case L2CAP_MODE_STREAMING:
272		if (!disable_ertm)
273			break;
274		/* fall through */
275	default:
276		err = -ENOTSUPP;
277		goto done;
278	}
279
280	sk->sk_max_ack_backlog = backlog;
281	sk->sk_ack_backlog = 0;
282
283	chan->state = BT_LISTEN;
284	sk->sk_state = BT_LISTEN;
285
286done:
287	release_sock(sk);
288	return err;
289}
290
291static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
292			     int flags)
293{
294	DECLARE_WAITQUEUE(wait, current);
295	struct sock *sk = sock->sk, *nsk;
296	long timeo;
297	int err = 0;
298
299	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
300
301	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
302
303	BT_DBG("sk %p timeo %ld", sk, timeo);
304
305	/* Wait for an incoming connection. (wake-one). */
306	add_wait_queue_exclusive(sk_sleep(sk), &wait);
307	while (1) {
308		set_current_state(TASK_INTERRUPTIBLE);
309
310		if (sk->sk_state != BT_LISTEN) {
311			err = -EBADFD;
312			break;
313		}
314
315		nsk = bt_accept_dequeue(sk, newsock);
316		if (nsk)
317			break;
318
319		if (!timeo) {
320			err = -EAGAIN;
321			break;
322		}
323
324		if (signal_pending(current)) {
325			err = sock_intr_errno(timeo);
326			break;
327		}
328
329		release_sock(sk);
330		timeo = schedule_timeout(timeo);
331		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
332	}
333	__set_current_state(TASK_RUNNING);
334	remove_wait_queue(sk_sleep(sk), &wait);
335
336	if (err)
337		goto done;
338
339	newsock->state = SS_CONNECTED;
340
341	BT_DBG("new socket %p", nsk);
342
343done:
344	release_sock(sk);
345	return err;
346}
347
348static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
349			      int *len, int peer)
350{
351	struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
352	struct sock *sk = sock->sk;
353	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
354
355	BT_DBG("sock %p, sk %p", sock, sk);
356
357	memset(la, 0, sizeof(struct sockaddr_l2));
358	addr->sa_family = AF_BLUETOOTH;
359	*len = sizeof(struct sockaddr_l2);
360
361	if (peer) {
362		la->l2_psm = chan->psm;
363		bacpy(&la->l2_bdaddr, &chan->dst);
364		la->l2_cid = cpu_to_le16(chan->dcid);
365		la->l2_bdaddr_type = chan->dst_type;
366	} else {
367		la->l2_psm = chan->sport;
368		bacpy(&la->l2_bdaddr, &chan->src);
369		la->l2_cid = cpu_to_le16(chan->scid);
370		la->l2_bdaddr_type = chan->src_type;
371	}
372
373	return 0;
374}
375
376static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
377				     char __user *optval, int __user *optlen)
378{
379	struct sock *sk = sock->sk;
380	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
381	struct l2cap_options opts;
382	struct l2cap_conninfo cinfo;
383	int len, err = 0;
384	u32 opt;
385
386	BT_DBG("sk %p", sk);
387
388	if (get_user(len, optlen))
389		return -EFAULT;
390
391	lock_sock(sk);
392
393	switch (optname) {
394	case L2CAP_OPTIONS:
395		/* LE sockets should use BT_SNDMTU/BT_RCVMTU, but since
396		 * legacy ATT code depends on getsockopt for
397		 * L2CAP_OPTIONS we need to let this pass.
398		 */
399		if (bdaddr_type_is_le(chan->src_type) &&
400		    chan->scid != L2CAP_CID_ATT) {
401			err = -EINVAL;
402			break;
403		}
404
405		memset(&opts, 0, sizeof(opts));
406		opts.imtu     = chan->imtu;
407		opts.omtu     = chan->omtu;
408		opts.flush_to = chan->flush_to;
409		opts.mode     = chan->mode;
410		opts.fcs      = chan->fcs;
411		opts.max_tx   = chan->max_tx;
412		opts.txwin_size = chan->tx_win;
413
414		len = min_t(unsigned int, len, sizeof(opts));
415		if (copy_to_user(optval, (char *) &opts, len))
416			err = -EFAULT;
417
418		break;
419
420	case L2CAP_LM:
421		switch (chan->sec_level) {
422		case BT_SECURITY_LOW:
423			opt = L2CAP_LM_AUTH;
424			break;
425		case BT_SECURITY_MEDIUM:
426			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
427			break;
428		case BT_SECURITY_HIGH:
429			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
430			      L2CAP_LM_SECURE;
431			break;
432		default:
433			opt = 0;
434			break;
435		}
436
437		if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
438			opt |= L2CAP_LM_MASTER;
439
440		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
441			opt |= L2CAP_LM_RELIABLE;
442
443		if (put_user(opt, (u32 __user *) optval))
444			err = -EFAULT;
445		break;
446
447	case L2CAP_CONNINFO:
448		if (sk->sk_state != BT_CONNECTED &&
449		    !(sk->sk_state == BT_CONNECT2 &&
450		      test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
451			err = -ENOTCONN;
452			break;
453		}
454
455		memset(&cinfo, 0, sizeof(cinfo));
456		cinfo.hci_handle = chan->conn->hcon->handle;
457		memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
458
459		len = min_t(unsigned int, len, sizeof(cinfo));
460		if (copy_to_user(optval, (char *) &cinfo, len))
461			err = -EFAULT;
462
463		break;
464
465	default:
466		err = -ENOPROTOOPT;
467		break;
468	}
469
470	release_sock(sk);
471	return err;
472}
473
474static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
475				 char __user *optval, int __user *optlen)
476{
477	struct sock *sk = sock->sk;
478	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
479	struct bt_security sec;
480	struct bt_power pwr;
481	int len, err = 0;
482
483	BT_DBG("sk %p", sk);
484
485	if (level == SOL_L2CAP)
486		return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
487
488	if (level != SOL_BLUETOOTH)
489		return -ENOPROTOOPT;
490
491	if (get_user(len, optlen))
492		return -EFAULT;
493
494	lock_sock(sk);
495
496	switch (optname) {
497	case BT_SECURITY:
498		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
499		    chan->chan_type != L2CAP_CHAN_RAW) {
500			err = -EINVAL;
501			break;
502		}
503
504		memset(&sec, 0, sizeof(sec));
505		if (chan->conn) {
506			sec.level = chan->conn->hcon->sec_level;
507
508			if (sk->sk_state == BT_CONNECTED)
509				sec.key_size = chan->conn->hcon->enc_key_size;
510		} else {
511			sec.level = chan->sec_level;
512		}
513
514		len = min_t(unsigned int, len, sizeof(sec));
515		if (copy_to_user(optval, (char *) &sec, len))
516			err = -EFAULT;
517
518		break;
519
520	case BT_DEFER_SETUP:
521		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
522			err = -EINVAL;
523			break;
524		}
525
526		if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
527			     (u32 __user *) optval))
528			err = -EFAULT;
529
530		break;
531
532	case BT_FLUSHABLE:
533		if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
534			     (u32 __user *) optval))
535			err = -EFAULT;
536
537		break;
538
539	case BT_POWER:
540		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
541		    && sk->sk_type != SOCK_RAW) {
542			err = -EINVAL;
543			break;
544		}
545
546		pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
547
548		len = min_t(unsigned int, len, sizeof(pwr));
549		if (copy_to_user(optval, (char *) &pwr, len))
550			err = -EFAULT;
551
552		break;
553
554	case BT_CHANNEL_POLICY:
555		if (put_user(chan->chan_policy, (u32 __user *) optval))
556			err = -EFAULT;
557		break;
558
559	case BT_SNDMTU:
560		if (!enable_lecoc) {
561			err = -EPROTONOSUPPORT;
562			break;
563		}
564
565		if (!bdaddr_type_is_le(chan->src_type)) {
566			err = -EINVAL;
567			break;
568		}
569
570		if (sk->sk_state != BT_CONNECTED) {
571			err = -ENOTCONN;
572			break;
573		}
574
575		if (put_user(chan->omtu, (u16 __user *) optval))
576			err = -EFAULT;
577		break;
578
579	case BT_RCVMTU:
580		if (!enable_lecoc) {
581			err = -EPROTONOSUPPORT;
582			break;
583		}
584
585		if (!bdaddr_type_is_le(chan->src_type)) {
586			err = -EINVAL;
587			break;
588		}
589
590		if (put_user(chan->imtu, (u16 __user *) optval))
591			err = -EFAULT;
592		break;
593
594	default:
595		err = -ENOPROTOOPT;
596		break;
597	}
598
599	release_sock(sk);
600	return err;
601}
602
603static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
604{
605	switch (chan->scid) {
606	case L2CAP_CID_ATT:
607		if (mtu < L2CAP_LE_MIN_MTU)
608			return false;
609		break;
610
611	default:
612		if (mtu < L2CAP_DEFAULT_MIN_MTU)
613			return false;
614	}
615
616	return true;
617}
618
619static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
620				     char __user *optval, unsigned int optlen)
621{
622	struct sock *sk = sock->sk;
623	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
624	struct l2cap_options opts;
625	int len, err = 0;
626	u32 opt;
627
628	BT_DBG("sk %p", sk);
629
630	lock_sock(sk);
631
632	switch (optname) {
633	case L2CAP_OPTIONS:
634		if (bdaddr_type_is_le(chan->src_type)) {
635			err = -EINVAL;
636			break;
637		}
638
639		if (sk->sk_state == BT_CONNECTED) {
640			err = -EINVAL;
641			break;
642		}
643
644		opts.imtu     = chan->imtu;
645		opts.omtu     = chan->omtu;
646		opts.flush_to = chan->flush_to;
647		opts.mode     = chan->mode;
648		opts.fcs      = chan->fcs;
649		opts.max_tx   = chan->max_tx;
650		opts.txwin_size = chan->tx_win;
651
652		len = min_t(unsigned int, sizeof(opts), optlen);
653		if (copy_from_user((char *) &opts, optval, len)) {
654			err = -EFAULT;
655			break;
656		}
657
658		if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
659			err = -EINVAL;
660			break;
661		}
662
663		if (!l2cap_valid_mtu(chan, opts.imtu)) {
664			err = -EINVAL;
665			break;
666		}
667
668		chan->mode = opts.mode;
669		switch (chan->mode) {
670		case L2CAP_MODE_LE_FLOWCTL:
671			break;
672		case L2CAP_MODE_BASIC:
673			clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
674			break;
675		case L2CAP_MODE_ERTM:
676		case L2CAP_MODE_STREAMING:
677			if (!disable_ertm)
678				break;
679			/* fall through */
680		default:
681			err = -EINVAL;
682			break;
683		}
684
685		chan->imtu = opts.imtu;
686		chan->omtu = opts.omtu;
687		chan->fcs  = opts.fcs;
688		chan->max_tx = opts.max_tx;
689		chan->tx_win = opts.txwin_size;
690		chan->flush_to = opts.flush_to;
691		break;
692
693	case L2CAP_LM:
694		if (get_user(opt, (u32 __user *) optval)) {
695			err = -EFAULT;
696			break;
697		}
698
699		if (opt & L2CAP_LM_AUTH)
700			chan->sec_level = BT_SECURITY_LOW;
701		if (opt & L2CAP_LM_ENCRYPT)
702			chan->sec_level = BT_SECURITY_MEDIUM;
703		if (opt & L2CAP_LM_SECURE)
704			chan->sec_level = BT_SECURITY_HIGH;
705
706		if (opt & L2CAP_LM_MASTER)
707			set_bit(FLAG_ROLE_SWITCH, &chan->flags);
708		else
709			clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
710
711		if (opt & L2CAP_LM_RELIABLE)
712			set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
713		else
714			clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
715		break;
716
717	default:
718		err = -ENOPROTOOPT;
719		break;
720	}
721
722	release_sock(sk);
723	return err;
724}
725
726static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
727				 char __user *optval, unsigned int optlen)
728{
729	struct sock *sk = sock->sk;
730	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
731	struct bt_security sec;
732	struct bt_power pwr;
733	struct l2cap_conn *conn;
734	int len, err = 0;
735	u32 opt;
736
737	BT_DBG("sk %p", sk);
738
739	if (level == SOL_L2CAP)
740		return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
741
742	if (level != SOL_BLUETOOTH)
743		return -ENOPROTOOPT;
744
745	lock_sock(sk);
746
747	switch (optname) {
748	case BT_SECURITY:
749		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
750		    chan->chan_type != L2CAP_CHAN_RAW) {
751			err = -EINVAL;
752			break;
753		}
754
755		sec.level = BT_SECURITY_LOW;
756
757		len = min_t(unsigned int, sizeof(sec), optlen);
758		if (copy_from_user((char *) &sec, optval, len)) {
759			err = -EFAULT;
760			break;
761		}
762
763		if (sec.level < BT_SECURITY_LOW ||
764		    sec.level > BT_SECURITY_HIGH) {
765			err = -EINVAL;
766			break;
767		}
768
769		chan->sec_level = sec.level;
770
771		if (!chan->conn)
772			break;
773
774		conn = chan->conn;
775
776		/*change security for LE channels */
777		if (chan->scid == L2CAP_CID_ATT) {
778			if (!conn->hcon->out) {
779				err = -EINVAL;
780				break;
781			}
782
783			if (smp_conn_security(conn->hcon, sec.level))
784				break;
785			sk->sk_state = BT_CONFIG;
786			chan->state = BT_CONFIG;
787
788		/* or for ACL link */
789		} else if ((sk->sk_state == BT_CONNECT2 &&
790			    test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
791			   sk->sk_state == BT_CONNECTED) {
792			if (!l2cap_chan_check_security(chan))
793				set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
794			else
795				sk->sk_state_change(sk);
796		} else {
797			err = -EINVAL;
798		}
799		break;
800
801	case BT_DEFER_SETUP:
802		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
803			err = -EINVAL;
804			break;
805		}
806
807		if (get_user(opt, (u32 __user *) optval)) {
808			err = -EFAULT;
809			break;
810		}
811
812		if (opt) {
813			set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
814			set_bit(FLAG_DEFER_SETUP, &chan->flags);
815		} else {
816			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
817			clear_bit(FLAG_DEFER_SETUP, &chan->flags);
818		}
819		break;
820
821	case BT_FLUSHABLE:
822		if (get_user(opt, (u32 __user *) optval)) {
823			err = -EFAULT;
824			break;
825		}
826
827		if (opt > BT_FLUSHABLE_ON) {
828			err = -EINVAL;
829			break;
830		}
831
832		if (opt == BT_FLUSHABLE_OFF) {
833			conn = chan->conn;
834			/* proceed further only when we have l2cap_conn and
835			   No Flush support in the LM */
836			if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
837				err = -EINVAL;
838				break;
839			}
840		}
841
842		if (opt)
843			set_bit(FLAG_FLUSHABLE, &chan->flags);
844		else
845			clear_bit(FLAG_FLUSHABLE, &chan->flags);
846		break;
847
848	case BT_POWER:
849		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
850		    chan->chan_type != L2CAP_CHAN_RAW) {
851			err = -EINVAL;
852			break;
853		}
854
855		pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
856
857		len = min_t(unsigned int, sizeof(pwr), optlen);
858		if (copy_from_user((char *) &pwr, optval, len)) {
859			err = -EFAULT;
860			break;
861		}
862
863		if (pwr.force_active)
864			set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
865		else
866			clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
867		break;
868
869	case BT_CHANNEL_POLICY:
870		if (get_user(opt, (u32 __user *) optval)) {
871			err = -EFAULT;
872			break;
873		}
874
875		if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
876			err = -EINVAL;
877			break;
878		}
879
880		if (chan->mode != L2CAP_MODE_ERTM &&
881		    chan->mode != L2CAP_MODE_STREAMING) {
882			err = -EOPNOTSUPP;
883			break;
884		}
885
886		chan->chan_policy = (u8) opt;
887
888		if (sk->sk_state == BT_CONNECTED &&
889		    chan->move_role == L2CAP_MOVE_ROLE_NONE)
890			l2cap_move_start(chan);
891
892		break;
893
894	case BT_SNDMTU:
895		if (!enable_lecoc) {
896			err = -EPROTONOSUPPORT;
897			break;
898		}
899
900		if (!bdaddr_type_is_le(chan->src_type)) {
901			err = -EINVAL;
902			break;
903		}
904
905		/* Setting is not supported as it's the remote side that
906		 * decides this.
907		 */
908		err = -EPERM;
909		break;
910
911	case BT_RCVMTU:
912		if (!enable_lecoc) {
913			err = -EPROTONOSUPPORT;
914			break;
915		}
916
917		if (!bdaddr_type_is_le(chan->src_type)) {
918			err = -EINVAL;
919			break;
920		}
921
922		if (sk->sk_state == BT_CONNECTED) {
923			err = -EISCONN;
924			break;
925		}
926
927		if (get_user(opt, (u32 __user *) optval)) {
928			err = -EFAULT;
929			break;
930		}
931
932		chan->imtu = opt;
933		break;
934
935	default:
936		err = -ENOPROTOOPT;
937		break;
938	}
939
940	release_sock(sk);
941	return err;
942}
943
944static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
945			      struct msghdr *msg, size_t len)
946{
947	struct sock *sk = sock->sk;
948	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
949	int err;
950
951	BT_DBG("sock %p, sk %p", sock, sk);
952
953	err = sock_error(sk);
954	if (err)
955		return err;
956
957	if (msg->msg_flags & MSG_OOB)
958		return -EOPNOTSUPP;
959
960	if (sk->sk_state != BT_CONNECTED)
961		return -ENOTCONN;
962
963	lock_sock(sk);
964	err = bt_sock_wait_ready(sk, msg->msg_flags);
965	release_sock(sk);
966	if (err)
967		return err;
968
969	l2cap_chan_lock(chan);
970	err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
971	l2cap_chan_unlock(chan);
972
973	return err;
974}
975
976static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
977			      struct msghdr *msg, size_t len, int flags)
978{
979	struct sock *sk = sock->sk;
980	struct l2cap_pinfo *pi = l2cap_pi(sk);
981	int err;
982
983	lock_sock(sk);
984
985	if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
986						    &bt_sk(sk)->flags)) {
987		if (bdaddr_type_is_le(pi->chan->src_type)) {
988			sk->sk_state = BT_CONNECTED;
989			pi->chan->state = BT_CONNECTED;
990			__l2cap_le_connect_rsp_defer(pi->chan);
991		} else {
992			sk->sk_state = BT_CONFIG;
993			pi->chan->state = BT_CONFIG;
994			__l2cap_connect_rsp_defer(pi->chan);
995		}
996
997		err = 0;
998		goto done;
999	}
1000
1001	release_sock(sk);
1002
1003	if (sock->type == SOCK_STREAM)
1004		err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
1005	else
1006		err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
1007
1008	if (pi->chan->mode != L2CAP_MODE_ERTM)
1009		return err;
1010
1011	/* Attempt to put pending rx data in the socket buffer */
1012
1013	lock_sock(sk);
1014
1015	if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
1016		goto done;
1017
1018	if (pi->rx_busy_skb) {
1019		if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
1020			pi->rx_busy_skb = NULL;
1021		else
1022			goto done;
1023	}
1024
1025	/* Restore data flow when half of the receive buffer is
1026	 * available.  This avoids resending large numbers of
1027	 * frames.
1028	 */
1029	if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
1030		l2cap_chan_busy(pi->chan, 0);
1031
1032done:
1033	release_sock(sk);
1034	return err;
1035}
1036
1037/* Kill socket (only if zapped and orphan)
1038 * Must be called on unlocked socket.
1039 */
1040static void l2cap_sock_kill(struct sock *sk)
1041{
1042	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
1043		return;
1044
1045	BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
1046
1047	/* Kill poor orphan */
1048
1049	l2cap_chan_put(l2cap_pi(sk)->chan);
1050	sock_set_flag(sk, SOCK_DEAD);
1051	sock_put(sk);
1052}
1053
1054static int __l2cap_wait_ack(struct sock *sk)
1055{
1056	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1057	DECLARE_WAITQUEUE(wait, current);
1058	int err = 0;
1059	int timeo = HZ/5;
1060
1061	add_wait_queue(sk_sleep(sk), &wait);
1062	set_current_state(TASK_INTERRUPTIBLE);
1063	while (chan->unacked_frames > 0 && chan->conn) {
1064		if (!timeo)
1065			timeo = HZ/5;
1066
1067		if (signal_pending(current)) {
1068			err = sock_intr_errno(timeo);
1069			break;
1070		}
1071
1072		release_sock(sk);
1073		timeo = schedule_timeout(timeo);
1074		lock_sock(sk);
1075		set_current_state(TASK_INTERRUPTIBLE);
1076
1077		err = sock_error(sk);
1078		if (err)
1079			break;
1080	}
1081	set_current_state(TASK_RUNNING);
1082	remove_wait_queue(sk_sleep(sk), &wait);
1083	return err;
1084}
1085
1086static int l2cap_sock_shutdown(struct socket *sock, int how)
1087{
1088	struct sock *sk = sock->sk;
1089	struct l2cap_chan *chan;
1090	struct l2cap_conn *conn;
1091	int err = 0;
1092
1093	BT_DBG("sock %p, sk %p", sock, sk);
1094
1095	if (!sk)
1096		return 0;
1097
1098	chan = l2cap_pi(sk)->chan;
1099	conn = chan->conn;
1100
1101	if (conn)
1102		mutex_lock(&conn->chan_lock);
1103
1104	l2cap_chan_lock(chan);
1105	lock_sock(sk);
1106
1107	if (!sk->sk_shutdown) {
1108		if (chan->mode == L2CAP_MODE_ERTM)
1109			err = __l2cap_wait_ack(sk);
1110
1111		sk->sk_shutdown = SHUTDOWN_MASK;
1112
1113		release_sock(sk);
1114		l2cap_chan_close(chan, 0);
1115		lock_sock(sk);
1116
1117		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
1118			err = bt_sock_wait_state(sk, BT_CLOSED,
1119						 sk->sk_lingertime);
1120	}
1121
1122	if (!err && sk->sk_err)
1123		err = -sk->sk_err;
1124
1125	release_sock(sk);
1126	l2cap_chan_unlock(chan);
1127
1128	if (conn)
1129		mutex_unlock(&conn->chan_lock);
1130
1131	return err;
1132}
1133
1134static int l2cap_sock_release(struct socket *sock)
1135{
1136	struct sock *sk = sock->sk;
1137	int err;
1138
1139	BT_DBG("sock %p, sk %p", sock, sk);
1140
1141	if (!sk)
1142		return 0;
1143
1144	bt_sock_unlink(&l2cap_sk_list, sk);
1145
1146	err = l2cap_sock_shutdown(sock, 2);
1147
1148	sock_orphan(sk);
1149	l2cap_sock_kill(sk);
1150	return err;
1151}
1152
1153static void l2cap_sock_cleanup_listen(struct sock *parent)
1154{
1155	struct sock *sk;
1156
1157	BT_DBG("parent %p", parent);
1158
1159	/* Close not yet accepted channels */
1160	while ((sk = bt_accept_dequeue(parent, NULL))) {
1161		struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1162
1163		l2cap_chan_lock(chan);
1164		__clear_chan_timer(chan);
1165		l2cap_chan_close(chan, ECONNRESET);
1166		l2cap_chan_unlock(chan);
1167
1168		l2cap_sock_kill(sk);
1169	}
1170}
1171
1172static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
1173{
1174	struct sock *sk, *parent = chan->data;
1175
1176	lock_sock(parent);
1177
1178	/* Check for backlog size */
1179	if (sk_acceptq_is_full(parent)) {
1180		BT_DBG("backlog full %d", parent->sk_ack_backlog);
1181		return NULL;
1182	}
1183
1184	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
1185			      GFP_ATOMIC);
1186	if (!sk)
1187		return NULL;
1188
1189	bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
1190
1191	l2cap_sock_init(sk, parent);
1192
1193	bt_accept_enqueue(parent, sk);
1194
1195	release_sock(parent);
1196
1197	return l2cap_pi(sk)->chan;
1198}
1199
1200static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1201{
1202	struct sock *sk = chan->data;
1203	int err;
1204
1205	lock_sock(sk);
1206
1207	if (l2cap_pi(sk)->rx_busy_skb) {
1208		err = -ENOMEM;
1209		goto done;
1210	}
1211
1212	err = sock_queue_rcv_skb(sk, skb);
1213
1214	/* For ERTM, handle one skb that doesn't fit into the recv
1215	 * buffer.  This is important to do because the data frames
1216	 * have already been acked, so the skb cannot be discarded.
1217	 *
1218	 * Notify the l2cap core that the buffer is full, so the
1219	 * LOCAL_BUSY state is entered and no more frames are
1220	 * acked and reassembled until there is buffer space
1221	 * available.
1222	 */
1223	if (err < 0 && chan->mode == L2CAP_MODE_ERTM) {
1224		l2cap_pi(sk)->rx_busy_skb = skb;
1225		l2cap_chan_busy(chan, 1);
1226		err = 0;
1227	}
1228
1229done:
1230	release_sock(sk);
1231
1232	return err;
1233}
1234
1235static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1236{
1237	struct sock *sk = chan->data;
1238
1239	l2cap_sock_kill(sk);
1240}
1241
1242static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
1243{
1244	struct sock *sk = chan->data;
1245	struct sock *parent;
1246
1247	lock_sock(sk);
1248
1249	parent = bt_sk(sk)->parent;
1250
1251	sock_set_flag(sk, SOCK_ZAPPED);
1252
1253	switch (chan->state) {
1254	case BT_OPEN:
1255	case BT_BOUND:
1256	case BT_CLOSED:
1257		break;
1258	case BT_LISTEN:
1259		l2cap_sock_cleanup_listen(sk);
1260		sk->sk_state = BT_CLOSED;
1261		chan->state = BT_CLOSED;
1262
1263		break;
1264	default:
1265		sk->sk_state = BT_CLOSED;
1266		chan->state = BT_CLOSED;
1267
1268		sk->sk_err = err;
1269
1270		if (parent) {
1271			bt_accept_unlink(sk);
1272			parent->sk_data_ready(parent, 0);
1273		} else {
1274			sk->sk_state_change(sk);
1275		}
1276
1277		break;
1278	}
1279
1280	release_sock(sk);
1281}
1282
1283static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
1284				       int err)
1285{
1286	struct sock *sk = chan->data;
1287
1288	sk->sk_state = state;
1289
1290	if (err)
1291		sk->sk_err = err;
1292}
1293
1294static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1295					       unsigned long len, int nb)
1296{
1297	struct sock *sk = chan->data;
1298	struct sk_buff *skb;
1299	int err;
1300
1301	l2cap_chan_unlock(chan);
1302	skb = bt_skb_send_alloc(sk, len, nb, &err);
1303	l2cap_chan_lock(chan);
1304
1305	if (!skb)
1306		return ERR_PTR(err);
1307
1308	bt_cb(skb)->chan = chan;
1309
1310	return skb;
1311}
1312
1313static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1314{
1315	struct sock *sk = chan->data;
1316	struct sock *parent;
1317
1318	lock_sock(sk);
1319
1320	parent = bt_sk(sk)->parent;
1321
1322	BT_DBG("sk %p, parent %p", sk, parent);
1323
1324	sk->sk_state = BT_CONNECTED;
1325	sk->sk_state_change(sk);
1326
1327	if (parent)
1328		parent->sk_data_ready(parent, 0);
1329
1330	release_sock(sk);
1331}
1332
1333static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
1334{
1335	struct sock *parent, *sk = chan->data;
1336
1337	lock_sock(sk);
1338
1339	parent = bt_sk(sk)->parent;
1340	if (parent)
1341		parent->sk_data_ready(parent, 0);
1342
1343	release_sock(sk);
1344}
1345
1346static void l2cap_sock_resume_cb(struct l2cap_chan *chan)
1347{
1348	struct sock *sk = chan->data;
1349
1350	clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1351	sk->sk_state_change(sk);
1352}
1353
1354static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan)
1355{
1356	struct sock *sk = chan->data;
1357
1358	lock_sock(sk);
1359	sk->sk_shutdown = SHUTDOWN_MASK;
1360	release_sock(sk);
1361}
1362
1363static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan)
1364{
1365	struct sock *sk = chan->data;
1366
1367	return sk->sk_sndtimeo;
1368}
1369
1370static void l2cap_sock_suspend_cb(struct l2cap_chan *chan)
1371{
1372	struct sock *sk = chan->data;
1373
1374	set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1375	sk->sk_state_change(sk);
1376}
1377
1378static struct l2cap_ops l2cap_chan_ops = {
1379	.name		= "L2CAP Socket Interface",
1380	.new_connection	= l2cap_sock_new_connection_cb,
1381	.recv		= l2cap_sock_recv_cb,
1382	.close		= l2cap_sock_close_cb,
1383	.teardown	= l2cap_sock_teardown_cb,
1384	.state_change	= l2cap_sock_state_change_cb,
1385	.ready		= l2cap_sock_ready_cb,
1386	.defer		= l2cap_sock_defer_cb,
1387	.resume		= l2cap_sock_resume_cb,
1388	.suspend	= l2cap_sock_suspend_cb,
1389	.set_shutdown	= l2cap_sock_set_shutdown_cb,
1390	.get_sndtimeo	= l2cap_sock_get_sndtimeo_cb,
1391	.alloc_skb	= l2cap_sock_alloc_skb_cb,
1392};
1393
1394static void l2cap_sock_destruct(struct sock *sk)
1395{
1396	BT_DBG("sk %p", sk);
1397
1398	if (l2cap_pi(sk)->chan)
1399		l2cap_chan_put(l2cap_pi(sk)->chan);
1400
1401	if (l2cap_pi(sk)->rx_busy_skb) {
1402		kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1403		l2cap_pi(sk)->rx_busy_skb = NULL;
1404	}
1405
1406	skb_queue_purge(&sk->sk_receive_queue);
1407	skb_queue_purge(&sk->sk_write_queue);
1408}
1409
1410static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name,
1411			       int *msg_namelen)
1412{
1413	struct sockaddr_l2 *la = (struct sockaddr_l2 *) msg_name;
1414
1415	memset(la, 0, sizeof(struct sockaddr_l2));
1416	la->l2_family = AF_BLUETOOTH;
1417	la->l2_psm = bt_cb(skb)->psm;
1418	bacpy(&la->l2_bdaddr, &bt_cb(skb)->bdaddr);
1419
1420	*msg_namelen = sizeof(struct sockaddr_l2);
1421}
1422
1423static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1424{
1425	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1426
1427	BT_DBG("sk %p", sk);
1428
1429	if (parent) {
1430		struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1431
1432		sk->sk_type = parent->sk_type;
1433		bt_sk(sk)->flags = bt_sk(parent)->flags;
1434
1435		chan->chan_type = pchan->chan_type;
1436		chan->imtu = pchan->imtu;
1437		chan->omtu = pchan->omtu;
1438		chan->conf_state = pchan->conf_state;
1439		chan->mode = pchan->mode;
1440		chan->fcs  = pchan->fcs;
1441		chan->max_tx = pchan->max_tx;
1442		chan->tx_win = pchan->tx_win;
1443		chan->tx_win_max = pchan->tx_win_max;
1444		chan->sec_level = pchan->sec_level;
1445		chan->flags = pchan->flags;
1446		chan->tx_credits = pchan->tx_credits;
1447		chan->rx_credits = pchan->rx_credits;
1448
1449		security_sk_clone(parent, sk);
1450	} else {
1451		switch (sk->sk_type) {
1452		case SOCK_RAW:
1453			chan->chan_type = L2CAP_CHAN_RAW;
1454			break;
1455		case SOCK_DGRAM:
1456			chan->chan_type = L2CAP_CHAN_CONN_LESS;
1457			bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name;
1458			break;
1459		case SOCK_SEQPACKET:
1460		case SOCK_STREAM:
1461			chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1462			break;
1463		}
1464
1465		chan->imtu = L2CAP_DEFAULT_MTU;
1466		chan->omtu = 0;
1467		if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1468			chan->mode = L2CAP_MODE_ERTM;
1469			set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1470		} else {
1471			chan->mode = L2CAP_MODE_BASIC;
1472		}
1473
1474		l2cap_chan_set_defaults(chan);
1475	}
1476
1477	/* Default config options */
1478	chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1479
1480	chan->data = sk;
1481	chan->ops = &l2cap_chan_ops;
1482}
1483
1484static struct proto l2cap_proto = {
1485	.name		= "L2CAP",
1486	.owner		= THIS_MODULE,
1487	.obj_size	= sizeof(struct l2cap_pinfo)
1488};
1489
1490static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
1491				     int proto, gfp_t prio)
1492{
1493	struct sock *sk;
1494	struct l2cap_chan *chan;
1495
1496	sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1497	if (!sk)
1498		return NULL;
1499
1500	sock_init_data(sock, sk);
1501	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1502
1503	sk->sk_destruct = l2cap_sock_destruct;
1504	sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1505
1506	sock_reset_flag(sk, SOCK_ZAPPED);
1507
1508	sk->sk_protocol = proto;
1509	sk->sk_state = BT_OPEN;
1510
1511	chan = l2cap_chan_create();
1512	if (!chan) {
1513		sk_free(sk);
1514		return NULL;
1515	}
1516
1517	l2cap_chan_hold(chan);
1518
1519	l2cap_pi(sk)->chan = chan;
1520
1521	return sk;
1522}
1523
1524static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1525			     int kern)
1526{
1527	struct sock *sk;
1528
1529	BT_DBG("sock %p", sock);
1530
1531	sock->state = SS_UNCONNECTED;
1532
1533	if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1534	    sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1535		return -ESOCKTNOSUPPORT;
1536
1537	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1538		return -EPERM;
1539
1540	sock->ops = &l2cap_sock_ops;
1541
1542	sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1543	if (!sk)
1544		return -ENOMEM;
1545
1546	l2cap_sock_init(sk, NULL);
1547	bt_sock_link(&l2cap_sk_list, sk);
1548	return 0;
1549}
1550
1551static const struct proto_ops l2cap_sock_ops = {
1552	.family		= PF_BLUETOOTH,
1553	.owner		= THIS_MODULE,
1554	.release	= l2cap_sock_release,
1555	.bind		= l2cap_sock_bind,
1556	.connect	= l2cap_sock_connect,
1557	.listen		= l2cap_sock_listen,
1558	.accept		= l2cap_sock_accept,
1559	.getname	= l2cap_sock_getname,
1560	.sendmsg	= l2cap_sock_sendmsg,
1561	.recvmsg	= l2cap_sock_recvmsg,
1562	.poll		= bt_sock_poll,
1563	.ioctl		= bt_sock_ioctl,
1564	.mmap		= sock_no_mmap,
1565	.socketpair	= sock_no_socketpair,
1566	.shutdown	= l2cap_sock_shutdown,
1567	.setsockopt	= l2cap_sock_setsockopt,
1568	.getsockopt	= l2cap_sock_getsockopt
1569};
1570
1571static const struct net_proto_family l2cap_sock_family_ops = {
1572	.family	= PF_BLUETOOTH,
1573	.owner	= THIS_MODULE,
1574	.create	= l2cap_sock_create,
1575};
1576
1577int __init l2cap_init_sockets(void)
1578{
1579	int err;
1580
1581	err = proto_register(&l2cap_proto, 0);
1582	if (err < 0)
1583		return err;
1584
1585	err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1586	if (err < 0) {
1587		BT_ERR("L2CAP socket registration failed");
1588		goto error;
1589	}
1590
1591	err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
1592			     NULL);
1593	if (err < 0) {
1594		BT_ERR("Failed to create L2CAP proc file");
1595		bt_sock_unregister(BTPROTO_L2CAP);
1596		goto error;
1597	}
1598
1599	BT_INFO("L2CAP socket layer initialized");
1600
1601	return 0;
1602
1603error:
1604	proto_unregister(&l2cap_proto);
1605	return err;
1606}
1607
1608void l2cap_cleanup_sockets(void)
1609{
1610	bt_procfs_cleanup(&init_net, "l2cap");
1611	bt_sock_unregister(BTPROTO_L2CAP);
1612	proto_unregister(&l2cap_proto);
1613}
1614
1615module_param(enable_lecoc, bool, 0644);
1616MODULE_PARM_DESC(enable_lecoc, "Enable support for LE CoC");
1617