l2cap_sock.c revision 9a91a04a95d30a18909e2aec9d7b17b4c86088a7
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
7   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License version 2 as
11   published by the Free Software Foundation;
12
13   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21
22   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24   SOFTWARE IS DISCLAIMED.
25*/
26
27/* Bluetooth L2CAP sockets. */
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h>
31#include <net/bluetooth/l2cap.h>
32
33static const struct proto_ops l2cap_sock_ops;
34
35/* ---- L2CAP timers ---- */
36static void l2cap_sock_timeout(unsigned long arg)
37{
38	struct sock *sk = (struct sock *) arg;
39	int reason;
40
41	BT_DBG("sock %p state %d", sk, sk->sk_state);
42
43	bh_lock_sock(sk);
44
45	if (sock_owned_by_user(sk)) {
46		/* sk is owned by user. Try again later */
47		l2cap_sock_set_timer(sk, HZ / 5);
48		bh_unlock_sock(sk);
49		sock_put(sk);
50		return;
51	}
52
53	if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
54		reason = ECONNREFUSED;
55	else if (sk->sk_state == BT_CONNECT &&
56			l2cap_pi(sk)->chan->sec_level != BT_SECURITY_SDP)
57		reason = ECONNREFUSED;
58	else
59		reason = ETIMEDOUT;
60
61	__l2cap_chan_close(l2cap_pi(sk)->chan, reason);
62
63	bh_unlock_sock(sk);
64
65	l2cap_sock_kill(sk);
66	sock_put(sk);
67}
68
69void l2cap_sock_set_timer(struct sock *sk, long timeout)
70{
71	BT_DBG("sk %p state %d timeout %ld", sk, sk->sk_state, timeout);
72	sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
73}
74
75void l2cap_sock_clear_timer(struct sock *sk)
76{
77	BT_DBG("sock %p state %d", sk, sk->sk_state);
78	sk_stop_timer(sk, &sk->sk_timer);
79}
80
81static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
82{
83	struct sock *sk = sock->sk;
84	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
85	struct sockaddr_l2 la;
86	int len, err = 0;
87
88	BT_DBG("sk %p", sk);
89
90	if (!addr || addr->sa_family != AF_BLUETOOTH)
91		return -EINVAL;
92
93	memset(&la, 0, sizeof(la));
94	len = min_t(unsigned int, sizeof(la), alen);
95	memcpy(&la, addr, len);
96
97	if (la.l2_cid && la.l2_psm)
98		return -EINVAL;
99
100	lock_sock(sk);
101
102	if (sk->sk_state != BT_OPEN) {
103		err = -EBADFD;
104		goto done;
105	}
106
107	if (la.l2_psm) {
108		__u16 psm = __le16_to_cpu(la.l2_psm);
109
110		/* PSM must be odd and lsb of upper byte must be 0 */
111		if ((psm & 0x0101) != 0x0001) {
112			err = -EINVAL;
113			goto done;
114		}
115
116		/* Restrict usage of well-known PSMs */
117		if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
118			err = -EACCES;
119			goto done;
120		}
121	}
122
123	if (la.l2_cid)
124		err = l2cap_add_scid(chan, la.l2_cid);
125	else
126		err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
127
128	if (err < 0)
129		goto done;
130
131	if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
132				__le16_to_cpu(la.l2_psm) == 0x0003)
133		chan->sec_level = BT_SECURITY_SDP;
134
135	bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
136	sk->sk_state = BT_BOUND;
137
138done:
139	release_sock(sk);
140	return err;
141}
142
143static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
144{
145	struct sock *sk = sock->sk;
146	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
147	struct sockaddr_l2 la;
148	int len, err = 0;
149
150	BT_DBG("sk %p", sk);
151
152	if (!addr || alen < sizeof(addr->sa_family) ||
153	    addr->sa_family != AF_BLUETOOTH)
154		return -EINVAL;
155
156	memset(&la, 0, sizeof(la));
157	len = min_t(unsigned int, sizeof(la), alen);
158	memcpy(&la, addr, len);
159
160	if (la.l2_cid && la.l2_psm)
161		return -EINVAL;
162
163	lock_sock(sk);
164
165	if ((sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM)
166			&& !(la.l2_psm || la.l2_cid)) {
167		err = -EINVAL;
168		goto done;
169	}
170
171	switch (chan->mode) {
172	case L2CAP_MODE_BASIC:
173		break;
174	case L2CAP_MODE_ERTM:
175	case L2CAP_MODE_STREAMING:
176		if (!disable_ertm)
177			break;
178		/* fall through */
179	default:
180		err = -ENOTSUPP;
181		goto done;
182	}
183
184	switch (sk->sk_state) {
185	case BT_CONNECT:
186	case BT_CONNECT2:
187	case BT_CONFIG:
188		/* Already connecting */
189		goto wait;
190
191	case BT_CONNECTED:
192		/* Already connected */
193		err = -EISCONN;
194		goto done;
195
196	case BT_OPEN:
197	case BT_BOUND:
198		/* Can connect */
199		break;
200
201	default:
202		err = -EBADFD;
203		goto done;
204	}
205
206	/* PSM must be odd and lsb of upper byte must be 0 */
207	if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 &&
208				sk->sk_type != SOCK_RAW && !la.l2_cid) {
209		err = -EINVAL;
210		goto done;
211	}
212
213	/* Set destination address and psm */
214	bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr);
215	chan->psm = la.l2_psm;
216	chan->dcid = la.l2_cid;
217
218	err = l2cap_chan_connect(l2cap_pi(sk)->chan);
219	if (err)
220		goto done;
221
222wait:
223	err = bt_sock_wait_state(sk, BT_CONNECTED,
224			sock_sndtimeo(sk, flags & O_NONBLOCK));
225done:
226	release_sock(sk);
227	return err;
228}
229
230static int l2cap_sock_listen(struct socket *sock, int backlog)
231{
232	struct sock *sk = sock->sk;
233	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
234	int err = 0;
235
236	BT_DBG("sk %p backlog %d", sk, backlog);
237
238	lock_sock(sk);
239
240	if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
241			|| sk->sk_state != BT_BOUND) {
242		err = -EBADFD;
243		goto done;
244	}
245
246	switch (chan->mode) {
247	case L2CAP_MODE_BASIC:
248		break;
249	case L2CAP_MODE_ERTM:
250	case L2CAP_MODE_STREAMING:
251		if (!disable_ertm)
252			break;
253		/* fall through */
254	default:
255		err = -ENOTSUPP;
256		goto done;
257	}
258
259	sk->sk_max_ack_backlog = backlog;
260	sk->sk_ack_backlog = 0;
261	sk->sk_state = BT_LISTEN;
262
263done:
264	release_sock(sk);
265	return err;
266}
267
268static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
269{
270	DECLARE_WAITQUEUE(wait, current);
271	struct sock *sk = sock->sk, *nsk;
272	long timeo;
273	int err = 0;
274
275	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
276
277	if (sk->sk_state != BT_LISTEN) {
278		err = -EBADFD;
279		goto done;
280	}
281
282	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
283
284	BT_DBG("sk %p timeo %ld", sk, timeo);
285
286	/* Wait for an incoming connection. (wake-one). */
287	add_wait_queue_exclusive(sk_sleep(sk), &wait);
288	while (!(nsk = bt_accept_dequeue(sk, newsock))) {
289		set_current_state(TASK_INTERRUPTIBLE);
290		if (!timeo) {
291			err = -EAGAIN;
292			break;
293		}
294
295		release_sock(sk);
296		timeo = schedule_timeout(timeo);
297		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
298
299		if (sk->sk_state != BT_LISTEN) {
300			err = -EBADFD;
301			break;
302		}
303
304		if (signal_pending(current)) {
305			err = sock_intr_errno(timeo);
306			break;
307		}
308	}
309	set_current_state(TASK_RUNNING);
310	remove_wait_queue(sk_sleep(sk), &wait);
311
312	if (err)
313		goto done;
314
315	newsock->state = SS_CONNECTED;
316
317	BT_DBG("new socket %p", nsk);
318
319done:
320	release_sock(sk);
321	return err;
322}
323
324static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
325{
326	struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
327	struct sock *sk = sock->sk;
328	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
329
330	BT_DBG("sock %p, sk %p", sock, sk);
331
332	addr->sa_family = AF_BLUETOOTH;
333	*len = sizeof(struct sockaddr_l2);
334
335	if (peer) {
336		la->l2_psm = chan->psm;
337		bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
338		la->l2_cid = cpu_to_le16(chan->dcid);
339	} else {
340		la->l2_psm = chan->sport;
341		bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
342		la->l2_cid = cpu_to_le16(chan->scid);
343	}
344
345	return 0;
346}
347
348static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
349{
350	struct sock *sk = sock->sk;
351	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
352	struct l2cap_options opts;
353	struct l2cap_conninfo cinfo;
354	int len, err = 0;
355	u32 opt;
356
357	BT_DBG("sk %p", sk);
358
359	if (get_user(len, optlen))
360		return -EFAULT;
361
362	lock_sock(sk);
363
364	switch (optname) {
365	case L2CAP_OPTIONS:
366		memset(&opts, 0, sizeof(opts));
367		opts.imtu     = chan->imtu;
368		opts.omtu     = chan->omtu;
369		opts.flush_to = chan->flush_to;
370		opts.mode     = chan->mode;
371		opts.fcs      = chan->fcs;
372		opts.max_tx   = chan->max_tx;
373		opts.txwin_size = (__u16)chan->tx_win;
374
375		len = min_t(unsigned int, len, sizeof(opts));
376		if (copy_to_user(optval, (char *) &opts, len))
377			err = -EFAULT;
378
379		break;
380
381	case L2CAP_LM:
382		switch (chan->sec_level) {
383		case BT_SECURITY_LOW:
384			opt = L2CAP_LM_AUTH;
385			break;
386		case BT_SECURITY_MEDIUM:
387			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
388			break;
389		case BT_SECURITY_HIGH:
390			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
391							L2CAP_LM_SECURE;
392			break;
393		default:
394			opt = 0;
395			break;
396		}
397
398		if (chan->role_switch)
399			opt |= L2CAP_LM_MASTER;
400
401		if (chan->force_reliable)
402			opt |= L2CAP_LM_RELIABLE;
403
404		if (put_user(opt, (u32 __user *) optval))
405			err = -EFAULT;
406		break;
407
408	case L2CAP_CONNINFO:
409		if (sk->sk_state != BT_CONNECTED &&
410					!(sk->sk_state == BT_CONNECT2 &&
411						bt_sk(sk)->defer_setup)) {
412			err = -ENOTCONN;
413			break;
414		}
415
416		cinfo.hci_handle = chan->conn->hcon->handle;
417		memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
418
419		len = min_t(unsigned int, len, sizeof(cinfo));
420		if (copy_to_user(optval, (char *) &cinfo, len))
421			err = -EFAULT;
422
423		break;
424
425	default:
426		err = -ENOPROTOOPT;
427		break;
428	}
429
430	release_sock(sk);
431	return err;
432}
433
434static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
435{
436	struct sock *sk = sock->sk;
437	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
438	struct bt_security sec;
439	int len, err = 0;
440
441	BT_DBG("sk %p", sk);
442
443	if (level == SOL_L2CAP)
444		return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
445
446	if (level != SOL_BLUETOOTH)
447		return -ENOPROTOOPT;
448
449	if (get_user(len, optlen))
450		return -EFAULT;
451
452	lock_sock(sk);
453
454	switch (optname) {
455	case BT_SECURITY:
456		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
457				&& sk->sk_type != SOCK_RAW) {
458			err = -EINVAL;
459			break;
460		}
461
462		sec.level = chan->sec_level;
463
464		len = min_t(unsigned int, len, sizeof(sec));
465		if (copy_to_user(optval, (char *) &sec, len))
466			err = -EFAULT;
467
468		break;
469
470	case BT_DEFER_SETUP:
471		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
472			err = -EINVAL;
473			break;
474		}
475
476		if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
477			err = -EFAULT;
478
479		break;
480
481	case BT_FLUSHABLE:
482		if (put_user(chan->flushable, (u32 __user *) optval))
483			err = -EFAULT;
484
485		break;
486
487	default:
488		err = -ENOPROTOOPT;
489		break;
490	}
491
492	release_sock(sk);
493	return err;
494}
495
496static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
497{
498	struct sock *sk = sock->sk;
499	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
500	struct l2cap_options opts;
501	int len, err = 0;
502	u32 opt;
503
504	BT_DBG("sk %p", sk);
505
506	lock_sock(sk);
507
508	switch (optname) {
509	case L2CAP_OPTIONS:
510		if (sk->sk_state == BT_CONNECTED) {
511			err = -EINVAL;
512			break;
513		}
514
515		opts.imtu     = chan->imtu;
516		opts.omtu     = chan->omtu;
517		opts.flush_to = chan->flush_to;
518		opts.mode     = chan->mode;
519		opts.fcs      = chan->fcs;
520		opts.max_tx   = chan->max_tx;
521		opts.txwin_size = (__u16)chan->tx_win;
522
523		len = min_t(unsigned int, sizeof(opts), optlen);
524		if (copy_from_user((char *) &opts, optval, len)) {
525			err = -EFAULT;
526			break;
527		}
528
529		if (opts.txwin_size > L2CAP_DEFAULT_TX_WINDOW) {
530			err = -EINVAL;
531			break;
532		}
533
534		chan->mode = opts.mode;
535		switch (chan->mode) {
536		case L2CAP_MODE_BASIC:
537			chan->conf_state &= ~L2CAP_CONF_STATE2_DEVICE;
538			break;
539		case L2CAP_MODE_ERTM:
540		case L2CAP_MODE_STREAMING:
541			if (!disable_ertm)
542				break;
543			/* fall through */
544		default:
545			err = -EINVAL;
546			break;
547		}
548
549		chan->imtu = opts.imtu;
550		chan->omtu = opts.omtu;
551		chan->fcs  = opts.fcs;
552		chan->max_tx = opts.max_tx;
553		chan->tx_win = (__u8)opts.txwin_size;
554		break;
555
556	case L2CAP_LM:
557		if (get_user(opt, (u32 __user *) optval)) {
558			err = -EFAULT;
559			break;
560		}
561
562		if (opt & L2CAP_LM_AUTH)
563			chan->sec_level = BT_SECURITY_LOW;
564		if (opt & L2CAP_LM_ENCRYPT)
565			chan->sec_level = BT_SECURITY_MEDIUM;
566		if (opt & L2CAP_LM_SECURE)
567			chan->sec_level = BT_SECURITY_HIGH;
568
569		chan->role_switch    = (opt & L2CAP_LM_MASTER);
570		chan->force_reliable = (opt & L2CAP_LM_RELIABLE);
571		break;
572
573	default:
574		err = -ENOPROTOOPT;
575		break;
576	}
577
578	release_sock(sk);
579	return err;
580}
581
582static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
583{
584	struct sock *sk = sock->sk;
585	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
586	struct bt_security sec;
587	int len, err = 0;
588	u32 opt;
589
590	BT_DBG("sk %p", sk);
591
592	if (level == SOL_L2CAP)
593		return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
594
595	if (level != SOL_BLUETOOTH)
596		return -ENOPROTOOPT;
597
598	lock_sock(sk);
599
600	switch (optname) {
601	case BT_SECURITY:
602		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
603				&& sk->sk_type != SOCK_RAW) {
604			err = -EINVAL;
605			break;
606		}
607
608		sec.level = BT_SECURITY_LOW;
609
610		len = min_t(unsigned int, sizeof(sec), optlen);
611		if (copy_from_user((char *) &sec, optval, len)) {
612			err = -EFAULT;
613			break;
614		}
615
616		if (sec.level < BT_SECURITY_LOW ||
617					sec.level > BT_SECURITY_HIGH) {
618			err = -EINVAL;
619			break;
620		}
621
622		chan->sec_level = sec.level;
623		break;
624
625	case BT_DEFER_SETUP:
626		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
627			err = -EINVAL;
628			break;
629		}
630
631		if (get_user(opt, (u32 __user *) optval)) {
632			err = -EFAULT;
633			break;
634		}
635
636		bt_sk(sk)->defer_setup = opt;
637		break;
638
639	case BT_FLUSHABLE:
640		if (get_user(opt, (u32 __user *) optval)) {
641			err = -EFAULT;
642			break;
643		}
644
645		if (opt > BT_FLUSHABLE_ON) {
646			err = -EINVAL;
647			break;
648		}
649
650		if (opt == BT_FLUSHABLE_OFF) {
651			struct l2cap_conn *conn = chan->conn;
652			/* proceed further only when we have l2cap_conn and
653			   No Flush support in the LM */
654			if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
655				err = -EINVAL;
656				break;
657			}
658		}
659
660		chan->flushable = opt;
661		break;
662
663	default:
664		err = -ENOPROTOOPT;
665		break;
666	}
667
668	release_sock(sk);
669	return err;
670}
671
672static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
673{
674	struct sock *sk = sock->sk;
675	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
676	int err;
677
678	BT_DBG("sock %p, sk %p", sock, sk);
679
680	err = sock_error(sk);
681	if (err)
682		return err;
683
684	if (msg->msg_flags & MSG_OOB)
685		return -EOPNOTSUPP;
686
687	lock_sock(sk);
688
689	if (sk->sk_state != BT_CONNECTED) {
690		release_sock(sk);
691		return -ENOTCONN;
692	}
693
694	err = l2cap_chan_send(chan, msg, len);
695
696	release_sock(sk);
697	return err;
698}
699
700static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
701{
702	struct sock *sk = sock->sk;
703
704	lock_sock(sk);
705
706	if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
707		sk->sk_state = BT_CONFIG;
708
709		__l2cap_connect_rsp_defer(l2cap_pi(sk)->chan);
710		release_sock(sk);
711		return 0;
712	}
713
714	release_sock(sk);
715
716	if (sock->type == SOCK_STREAM)
717		return bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
718
719	return bt_sock_recvmsg(iocb, sock, msg, len, flags);
720}
721
722/* Kill socket (only if zapped and orphan)
723 * Must be called on unlocked socket.
724 */
725void l2cap_sock_kill(struct sock *sk)
726{
727	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
728		return;
729
730	BT_DBG("sk %p state %d", sk, sk->sk_state);
731
732	/* Kill poor orphan */
733
734	l2cap_chan_destroy(l2cap_pi(sk)->chan);
735	sock_set_flag(sk, SOCK_DEAD);
736	sock_put(sk);
737}
738
739static int l2cap_sock_shutdown(struct socket *sock, int how)
740{
741	struct sock *sk = sock->sk;
742	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
743	int err = 0;
744
745	BT_DBG("sock %p, sk %p", sock, sk);
746
747	if (!sk)
748		return 0;
749
750	lock_sock(sk);
751	if (!sk->sk_shutdown) {
752		if (chan->mode == L2CAP_MODE_ERTM)
753			err = __l2cap_wait_ack(sk);
754
755		sk->sk_shutdown = SHUTDOWN_MASK;
756		l2cap_sock_clear_timer(sk);
757		__l2cap_chan_close(chan, 0);
758
759		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
760			err = bt_sock_wait_state(sk, BT_CLOSED,
761							sk->sk_lingertime);
762	}
763
764	if (!err && sk->sk_err)
765		err = -sk->sk_err;
766
767	release_sock(sk);
768	return err;
769}
770
771static int l2cap_sock_release(struct socket *sock)
772{
773	struct sock *sk = sock->sk;
774	int err;
775
776	BT_DBG("sock %p, sk %p", sock, sk);
777
778	if (!sk)
779		return 0;
780
781	err = l2cap_sock_shutdown(sock, 2);
782
783	sock_orphan(sk);
784	l2cap_sock_kill(sk);
785	return err;
786}
787
788static void l2cap_sock_destruct(struct sock *sk)
789{
790	BT_DBG("sk %p", sk);
791
792	skb_queue_purge(&sk->sk_receive_queue);
793	skb_queue_purge(&sk->sk_write_queue);
794}
795
796void l2cap_sock_init(struct sock *sk, struct sock *parent)
797{
798	struct l2cap_pinfo *pi = l2cap_pi(sk);
799	struct l2cap_chan *chan = pi->chan;
800
801	BT_DBG("sk %p", sk);
802
803	if (parent) {
804		struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
805
806		sk->sk_type = parent->sk_type;
807		bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
808
809		chan->imtu = pchan->imtu;
810		chan->omtu = pchan->omtu;
811		chan->conf_state = pchan->conf_state;
812		chan->mode = pchan->mode;
813		chan->fcs  = pchan->fcs;
814		chan->max_tx = pchan->max_tx;
815		chan->tx_win = pchan->tx_win;
816		chan->sec_level = pchan->sec_level;
817		chan->role_switch = pchan->role_switch;
818		chan->force_reliable = pchan->force_reliable;
819		chan->flushable = pchan->flushable;
820	} else {
821		chan->imtu = L2CAP_DEFAULT_MTU;
822		chan->omtu = 0;
823		if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
824			chan->mode = L2CAP_MODE_ERTM;
825			chan->conf_state |= L2CAP_CONF_STATE2_DEVICE;
826		} else {
827			chan->mode = L2CAP_MODE_BASIC;
828		}
829		chan->max_tx = L2CAP_DEFAULT_MAX_TX;
830		chan->fcs  = L2CAP_FCS_CRC16;
831		chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
832		chan->sec_level = BT_SECURITY_LOW;
833		chan->role_switch = 0;
834		chan->force_reliable = 0;
835		chan->flushable = BT_FLUSHABLE_OFF;
836	}
837
838	/* Default config options */
839	chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
840}
841
842static struct proto l2cap_proto = {
843	.name		= "L2CAP",
844	.owner		= THIS_MODULE,
845	.obj_size	= sizeof(struct l2cap_pinfo)
846};
847
848struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
849{
850	struct sock *sk;
851
852	sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
853	if (!sk)
854		return NULL;
855
856	sock_init_data(sock, sk);
857	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
858
859	sk->sk_destruct = l2cap_sock_destruct;
860	sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
861
862	sock_reset_flag(sk, SOCK_ZAPPED);
863
864	sk->sk_protocol = proto;
865	sk->sk_state = BT_OPEN;
866
867	setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk);
868
869	return sk;
870}
871
872static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
873			     int kern)
874{
875	struct sock *sk;
876	struct l2cap_chan *chan;
877
878	BT_DBG("sock %p", sock);
879
880	sock->state = SS_UNCONNECTED;
881
882	if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
883			sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
884		return -ESOCKTNOSUPPORT;
885
886	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
887		return -EPERM;
888
889	sock->ops = &l2cap_sock_ops;
890
891	sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
892	if (!sk)
893		return -ENOMEM;
894
895	chan = l2cap_chan_create(sk);
896	if (!chan) {
897		l2cap_sock_kill(sk);
898		return -ENOMEM;
899	}
900
901	l2cap_pi(sk)->chan = chan;
902
903	l2cap_sock_init(sk, NULL);
904	return 0;
905}
906
907static const struct proto_ops l2cap_sock_ops = {
908	.family		= PF_BLUETOOTH,
909	.owner		= THIS_MODULE,
910	.release	= l2cap_sock_release,
911	.bind		= l2cap_sock_bind,
912	.connect	= l2cap_sock_connect,
913	.listen		= l2cap_sock_listen,
914	.accept		= l2cap_sock_accept,
915	.getname	= l2cap_sock_getname,
916	.sendmsg	= l2cap_sock_sendmsg,
917	.recvmsg	= l2cap_sock_recvmsg,
918	.poll		= bt_sock_poll,
919	.ioctl		= bt_sock_ioctl,
920	.mmap		= sock_no_mmap,
921	.socketpair	= sock_no_socketpair,
922	.shutdown	= l2cap_sock_shutdown,
923	.setsockopt	= l2cap_sock_setsockopt,
924	.getsockopt	= l2cap_sock_getsockopt
925};
926
927static const struct net_proto_family l2cap_sock_family_ops = {
928	.family	= PF_BLUETOOTH,
929	.owner	= THIS_MODULE,
930	.create	= l2cap_sock_create,
931};
932
933int __init l2cap_init_sockets(void)
934{
935	int err;
936
937	err = proto_register(&l2cap_proto, 0);
938	if (err < 0)
939		return err;
940
941	err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
942	if (err < 0)
943		goto error;
944
945	BT_INFO("L2CAP socket layer initialized");
946
947	return 0;
948
949error:
950	BT_ERR("L2CAP socket registration failed");
951	proto_unregister(&l2cap_proto);
952	return err;
953}
954
955void l2cap_cleanup_sockets(void)
956{
957	if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
958		BT_ERR("L2CAP socket unregistration failed");
959
960	proto_unregister(&l2cap_proto);
961}
962