Bluetooth: silence lockdep warning
[linux-flexiantxendom0-3.2.10.git] / net / bluetooth / l2cap_sock.c
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/security.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 #include <net/bluetooth/smp.h>
37
38 static const struct proto_ops l2cap_sock_ops;
39 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
40 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
41
42 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
43 {
44         struct sock *sk = sock->sk;
45         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
46         struct sockaddr_l2 la;
47         int len, err = 0;
48
49         BT_DBG("sk %p", sk);
50
51         if (!addr || addr->sa_family != AF_BLUETOOTH)
52                 return -EINVAL;
53
54         memset(&la, 0, sizeof(la));
55         len = min_t(unsigned int, sizeof(la), alen);
56         memcpy(&la, addr, len);
57
58         if (la.l2_cid && la.l2_psm)
59                 return -EINVAL;
60
61         lock_sock(sk);
62
63         if (sk->sk_state != BT_OPEN) {
64                 err = -EBADFD;
65                 goto done;
66         }
67
68         if (la.l2_psm) {
69                 __u16 psm = __le16_to_cpu(la.l2_psm);
70
71                 /* PSM must be odd and lsb of upper byte must be 0 */
72                 if ((psm & 0x0101) != 0x0001) {
73                         err = -EINVAL;
74                         goto done;
75                 }
76
77                 /* Restrict usage of well-known PSMs */
78                 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
79                         err = -EACCES;
80                         goto done;
81                 }
82         }
83
84         if (la.l2_cid)
85                 err = l2cap_add_scid(chan, la.l2_cid);
86         else
87                 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
88
89         if (err < 0)
90                 goto done;
91
92         if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
93                                 __le16_to_cpu(la.l2_psm) == 0x0003)
94                 chan->sec_level = BT_SECURITY_SDP;
95
96         bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
97
98         chan->state = BT_BOUND;
99         sk->sk_state = BT_BOUND;
100
101 done:
102         release_sock(sk);
103         return err;
104 }
105
106 static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
107 {
108         struct sock *sk = sock->sk;
109         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
110         struct sockaddr_l2 la;
111         int len, err = 0;
112
113         BT_DBG("sk %p", sk);
114
115         if (!addr || alen < sizeof(addr->sa_family) ||
116             addr->sa_family != AF_BLUETOOTH)
117                 return -EINVAL;
118
119         memset(&la, 0, sizeof(la));
120         len = min_t(unsigned int, sizeof(la), alen);
121         memcpy(&la, addr, len);
122
123         if (la.l2_cid && la.l2_psm)
124                 return -EINVAL;
125
126         err = l2cap_chan_connect(chan, la.l2_psm, la.l2_cid, &la.l2_bdaddr);
127         if (err)
128                 goto done;
129
130         err = bt_sock_wait_state(sk, BT_CONNECTED,
131                         sock_sndtimeo(sk, flags & O_NONBLOCK));
132 done:
133         if (sock_owned_by_user(sk))
134                 release_sock(sk);
135         return err;
136 }
137
138 static int l2cap_sock_listen(struct socket *sock, int backlog)
139 {
140         struct sock *sk = sock->sk;
141         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
142         int err = 0;
143
144         BT_DBG("sk %p backlog %d", sk, backlog);
145
146         lock_sock(sk);
147
148         if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
149                         || sk->sk_state != BT_BOUND) {
150                 err = -EBADFD;
151                 goto done;
152         }
153
154         switch (chan->mode) {
155         case L2CAP_MODE_BASIC:
156                 break;
157         case L2CAP_MODE_ERTM:
158         case L2CAP_MODE_STREAMING:
159                 if (!disable_ertm)
160                         break;
161                 /* fall through */
162         default:
163                 err = -ENOTSUPP;
164                 goto done;
165         }
166
167         sk->sk_max_ack_backlog = backlog;
168         sk->sk_ack_backlog = 0;
169
170         chan->state = BT_LISTEN;
171         sk->sk_state = BT_LISTEN;
172
173 done:
174         release_sock(sk);
175         return err;
176 }
177
178 static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
179 {
180         DECLARE_WAITQUEUE(wait, current);
181         struct sock *sk = sock->sk, *nsk;
182         long timeo;
183         int err = 0;
184
185         lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
186
187         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
188
189         BT_DBG("sk %p timeo %ld", sk, timeo);
190
191         /* Wait for an incoming connection. (wake-one). */
192         add_wait_queue_exclusive(sk_sleep(sk), &wait);
193         while (1) {
194                 set_current_state(TASK_INTERRUPTIBLE);
195
196                 if (sk->sk_state != BT_LISTEN) {
197                         err = -EBADFD;
198                         break;
199                 }
200
201                 nsk = bt_accept_dequeue(sk, newsock);
202                 if (nsk)
203                         break;
204
205                 if (!timeo) {
206                         err = -EAGAIN;
207                         break;
208                 }
209
210                 if (signal_pending(current)) {
211                         err = sock_intr_errno(timeo);
212                         break;
213                 }
214
215                 release_sock(sk);
216                 timeo = schedule_timeout(timeo);
217                 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
218         }
219         __set_current_state(TASK_RUNNING);
220         remove_wait_queue(sk_sleep(sk), &wait);
221
222         if (err)
223                 goto done;
224
225         newsock->state = SS_CONNECTED;
226
227         BT_DBG("new socket %p", nsk);
228
229 done:
230         release_sock(sk);
231         return err;
232 }
233
234 static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
235 {
236         struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
237         struct sock *sk = sock->sk;
238         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
239
240         BT_DBG("sock %p, sk %p", sock, sk);
241
242         addr->sa_family = AF_BLUETOOTH;
243         *len = sizeof(struct sockaddr_l2);
244
245         if (peer) {
246                 la->l2_psm = chan->psm;
247                 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
248                 la->l2_cid = cpu_to_le16(chan->dcid);
249         } else {
250                 la->l2_psm = chan->sport;
251                 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
252                 la->l2_cid = cpu_to_le16(chan->scid);
253         }
254
255         return 0;
256 }
257
258 static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
259 {
260         struct sock *sk = sock->sk;
261         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
262         struct l2cap_options opts;
263         struct l2cap_conninfo cinfo;
264         int len, err = 0;
265         u32 opt;
266
267         BT_DBG("sk %p", sk);
268
269         if (get_user(len, optlen))
270                 return -EFAULT;
271
272         lock_sock(sk);
273
274         switch (optname) {
275         case L2CAP_OPTIONS:
276                 memset(&opts, 0, sizeof(opts));
277                 opts.imtu     = chan->imtu;
278                 opts.omtu     = chan->omtu;
279                 opts.flush_to = chan->flush_to;
280                 opts.mode     = chan->mode;
281                 opts.fcs      = chan->fcs;
282                 opts.max_tx   = chan->max_tx;
283                 opts.txwin_size = chan->tx_win;
284
285                 len = min_t(unsigned int, len, sizeof(opts));
286                 if (copy_to_user(optval, (char *) &opts, len))
287                         err = -EFAULT;
288
289                 break;
290
291         case L2CAP_LM:
292                 switch (chan->sec_level) {
293                 case BT_SECURITY_LOW:
294                         opt = L2CAP_LM_AUTH;
295                         break;
296                 case BT_SECURITY_MEDIUM:
297                         opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
298                         break;
299                 case BT_SECURITY_HIGH:
300                         opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
301                                                         L2CAP_LM_SECURE;
302                         break;
303                 default:
304                         opt = 0;
305                         break;
306                 }
307
308                 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
309                         opt |= L2CAP_LM_MASTER;
310
311                 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
312                         opt |= L2CAP_LM_RELIABLE;
313
314                 if (put_user(opt, (u32 __user *) optval))
315                         err = -EFAULT;
316                 break;
317
318         case L2CAP_CONNINFO:
319                 if (sk->sk_state != BT_CONNECTED &&
320                                         !(sk->sk_state == BT_CONNECT2 &&
321                                                 bt_sk(sk)->defer_setup)) {
322                         err = -ENOTCONN;
323                         break;
324                 }
325
326                 memset(&cinfo, 0, sizeof(cinfo));
327                 cinfo.hci_handle = chan->conn->hcon->handle;
328                 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
329
330                 len = min_t(unsigned int, len, sizeof(cinfo));
331                 if (copy_to_user(optval, (char *) &cinfo, len))
332                         err = -EFAULT;
333
334                 break;
335
336         default:
337                 err = -ENOPROTOOPT;
338                 break;
339         }
340
341         release_sock(sk);
342         return err;
343 }
344
345 static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
346 {
347         struct sock *sk = sock->sk;
348         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
349         struct bt_security sec;
350         struct bt_power pwr;
351         int len, err = 0;
352
353         BT_DBG("sk %p", sk);
354
355         if (level == SOL_L2CAP)
356                 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
357
358         if (level != SOL_BLUETOOTH)
359                 return -ENOPROTOOPT;
360
361         if (get_user(len, optlen))
362                 return -EFAULT;
363
364         lock_sock(sk);
365
366         switch (optname) {
367         case BT_SECURITY:
368                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
369                                         chan->chan_type != L2CAP_CHAN_RAW) {
370                         err = -EINVAL;
371                         break;
372                 }
373
374                 memset(&sec, 0, sizeof(sec));
375                 sec.level = chan->sec_level;
376
377                 if (sk->sk_state == BT_CONNECTED)
378                         sec.key_size = chan->conn->hcon->enc_key_size;
379
380                 len = min_t(unsigned int, len, sizeof(sec));
381                 if (copy_to_user(optval, (char *) &sec, len))
382                         err = -EFAULT;
383
384                 break;
385
386         case BT_DEFER_SETUP:
387                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
388                         err = -EINVAL;
389                         break;
390                 }
391
392                 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
393                         err = -EFAULT;
394
395                 break;
396
397         case BT_FLUSHABLE:
398                 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
399                                                 (u32 __user *) optval))
400                         err = -EFAULT;
401
402                 break;
403
404         case BT_POWER:
405                 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
406                                 && sk->sk_type != SOCK_RAW) {
407                         err = -EINVAL;
408                         break;
409                 }
410
411                 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
412
413                 len = min_t(unsigned int, len, sizeof(pwr));
414                 if (copy_to_user(optval, (char *) &pwr, len))
415                         err = -EFAULT;
416
417                 break;
418
419         case BT_CHANNEL_POLICY:
420                 if (!enable_hs) {
421                         err = -ENOPROTOOPT;
422                         break;
423                 }
424
425                 if (put_user(chan->chan_policy, (u32 __user *) optval))
426                         err = -EFAULT;
427                 break;
428
429         default:
430                 err = -ENOPROTOOPT;
431                 break;
432         }
433
434         release_sock(sk);
435         return err;
436 }
437
438 static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
439 {
440         struct sock *sk = sock->sk;
441         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
442         struct l2cap_options opts;
443         int len, err = 0;
444         u32 opt;
445
446         BT_DBG("sk %p", sk);
447
448         lock_sock(sk);
449
450         switch (optname) {
451         case L2CAP_OPTIONS:
452                 if (sk->sk_state == BT_CONNECTED) {
453                         err = -EINVAL;
454                         break;
455                 }
456
457                 opts.imtu     = chan->imtu;
458                 opts.omtu     = chan->omtu;
459                 opts.flush_to = chan->flush_to;
460                 opts.mode     = chan->mode;
461                 opts.fcs      = chan->fcs;
462                 opts.max_tx   = chan->max_tx;
463                 opts.txwin_size = chan->tx_win;
464
465                 len = min_t(unsigned int, sizeof(opts), optlen);
466                 if (copy_from_user((char *) &opts, optval, len)) {
467                         err = -EFAULT;
468                         break;
469                 }
470
471                 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
472                         err = -EINVAL;
473                         break;
474                 }
475
476                 chan->mode = opts.mode;
477                 switch (chan->mode) {
478                 case L2CAP_MODE_BASIC:
479                         clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
480                         break;
481                 case L2CAP_MODE_ERTM:
482                 case L2CAP_MODE_STREAMING:
483                         if (!disable_ertm)
484                                 break;
485                         /* fall through */
486                 default:
487                         err = -EINVAL;
488                         break;
489                 }
490
491                 chan->imtu = opts.imtu;
492                 chan->omtu = opts.omtu;
493                 chan->fcs  = opts.fcs;
494                 chan->max_tx = opts.max_tx;
495                 chan->tx_win = opts.txwin_size;
496                 break;
497
498         case L2CAP_LM:
499                 if (get_user(opt, (u32 __user *) optval)) {
500                         err = -EFAULT;
501                         break;
502                 }
503
504                 if (opt & L2CAP_LM_AUTH)
505                         chan->sec_level = BT_SECURITY_LOW;
506                 if (opt & L2CAP_LM_ENCRYPT)
507                         chan->sec_level = BT_SECURITY_MEDIUM;
508                 if (opt & L2CAP_LM_SECURE)
509                         chan->sec_level = BT_SECURITY_HIGH;
510
511                 if (opt & L2CAP_LM_MASTER)
512                         set_bit(FLAG_ROLE_SWITCH, &chan->flags);
513                 else
514                         clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
515
516                 if (opt & L2CAP_LM_RELIABLE)
517                         set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
518                 else
519                         clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
520                 break;
521
522         default:
523                 err = -ENOPROTOOPT;
524                 break;
525         }
526
527         release_sock(sk);
528         return err;
529 }
530
531 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
532 {
533         struct sock *sk = sock->sk;
534         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
535         struct bt_security sec;
536         struct bt_power pwr;
537         struct l2cap_conn *conn;
538         int len, err = 0;
539         u32 opt;
540
541         BT_DBG("sk %p", sk);
542
543         if (level == SOL_L2CAP)
544                 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
545
546         if (level != SOL_BLUETOOTH)
547                 return -ENOPROTOOPT;
548
549         lock_sock(sk);
550
551         switch (optname) {
552         case BT_SECURITY:
553                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
554                                         chan->chan_type != L2CAP_CHAN_RAW) {
555                         err = -EINVAL;
556                         break;
557                 }
558
559                 sec.level = BT_SECURITY_LOW;
560
561                 len = min_t(unsigned int, sizeof(sec), optlen);
562                 if (copy_from_user((char *) &sec, optval, len)) {
563                         err = -EFAULT;
564                         break;
565                 }
566
567                 if (sec.level < BT_SECURITY_LOW ||
568                                         sec.level > BT_SECURITY_HIGH) {
569                         err = -EINVAL;
570                         break;
571                 }
572
573                 chan->sec_level = sec.level;
574
575                 if (!chan->conn)
576                         break;
577
578                 conn = chan->conn;
579
580                 /*change security for LE channels */
581                 if (chan->scid == L2CAP_CID_LE_DATA) {
582                         if (!conn->hcon->out) {
583                                 err = -EINVAL;
584                                 break;
585                         }
586
587                         if (smp_conn_security(conn, sec.level))
588                                 break;
589                         sk->sk_state = BT_CONFIG;
590                         chan->state = BT_CONFIG;
591
592                 /* or for ACL link, under defer_setup time */
593                 } else if (sk->sk_state == BT_CONNECT2 &&
594                                         bt_sk(sk)->defer_setup) {
595                         err = l2cap_chan_check_security(chan);
596                 } else {
597                         err = -EINVAL;
598                 }
599                 break;
600
601         case BT_DEFER_SETUP:
602                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
603                         err = -EINVAL;
604                         break;
605                 }
606
607                 if (get_user(opt, (u32 __user *) optval)) {
608                         err = -EFAULT;
609                         break;
610                 }
611
612                 bt_sk(sk)->defer_setup = opt;
613                 break;
614
615         case BT_FLUSHABLE:
616                 if (get_user(opt, (u32 __user *) optval)) {
617                         err = -EFAULT;
618                         break;
619                 }
620
621                 if (opt > BT_FLUSHABLE_ON) {
622                         err = -EINVAL;
623                         break;
624                 }
625
626                 if (opt == BT_FLUSHABLE_OFF) {
627                         struct l2cap_conn *conn = chan->conn;
628                         /* proceed further only when we have l2cap_conn and
629                            No Flush support in the LM */
630                         if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
631                                 err = -EINVAL;
632                                 break;
633                         }
634                 }
635
636                 if (opt)
637                         set_bit(FLAG_FLUSHABLE, &chan->flags);
638                 else
639                         clear_bit(FLAG_FLUSHABLE, &chan->flags);
640                 break;
641
642         case BT_POWER:
643                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
644                                         chan->chan_type != L2CAP_CHAN_RAW) {
645                         err = -EINVAL;
646                         break;
647                 }
648
649                 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
650
651                 len = min_t(unsigned int, sizeof(pwr), optlen);
652                 if (copy_from_user((char *) &pwr, optval, len)) {
653                         err = -EFAULT;
654                         break;
655                 }
656
657                 if (pwr.force_active)
658                         set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
659                 else
660                         clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
661                 break;
662
663         case BT_CHANNEL_POLICY:
664                 if (!enable_hs) {
665                         err = -ENOPROTOOPT;
666                         break;
667                 }
668
669                 if (get_user(opt, (u32 __user *) optval)) {
670                         err = -EFAULT;
671                         break;
672                 }
673
674                 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
675                         err = -EINVAL;
676                         break;
677                 }
678
679                 if (chan->mode != L2CAP_MODE_ERTM &&
680                                 chan->mode != L2CAP_MODE_STREAMING) {
681                         err = -EOPNOTSUPP;
682                         break;
683                 }
684
685                 chan->chan_policy = (u8) opt;
686                 break;
687
688         default:
689                 err = -ENOPROTOOPT;
690                 break;
691         }
692
693         release_sock(sk);
694         return err;
695 }
696
697 static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
698 {
699         struct sock *sk = sock->sk;
700         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
701         int err;
702
703         BT_DBG("sock %p, sk %p", sock, sk);
704
705         err = sock_error(sk);
706         if (err)
707                 return err;
708
709         if (msg->msg_flags & MSG_OOB)
710                 return -EOPNOTSUPP;
711
712         lock_sock(sk);
713
714         if (sk->sk_state != BT_CONNECTED) {
715                 release_sock(sk);
716                 return -ENOTCONN;
717         }
718
719         err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
720
721         release_sock(sk);
722         return err;
723 }
724
725 static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
726 {
727         struct sock *sk = sock->sk;
728         struct l2cap_pinfo *pi = l2cap_pi(sk);
729         int err;
730
731         lock_sock(sk);
732
733         if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
734                 sk->sk_state = BT_CONFIG;
735                 pi->chan->state = BT_CONFIG;
736
737                 __l2cap_connect_rsp_defer(pi->chan);
738                 release_sock(sk);
739                 return 0;
740         }
741
742         release_sock(sk);
743
744         if (sock->type == SOCK_STREAM)
745                 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
746         else
747                 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
748
749         if (pi->chan->mode != L2CAP_MODE_ERTM)
750                 return err;
751
752         /* Attempt to put pending rx data in the socket buffer */
753
754         lock_sock(sk);
755
756         if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
757                 goto done;
758
759         if (pi->rx_busy_skb) {
760                 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
761                         pi->rx_busy_skb = NULL;
762                 else
763                         goto done;
764         }
765
766         /* Restore data flow when half of the receive buffer is
767          * available.  This avoids resending large numbers of
768          * frames.
769          */
770         if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
771                 l2cap_chan_busy(pi->chan, 0);
772
773 done:
774         release_sock(sk);
775         return err;
776 }
777
778 /* Kill socket (only if zapped and orphan)
779  * Must be called on unlocked socket.
780  */
781 static void l2cap_sock_kill(struct sock *sk)
782 {
783         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
784                 return;
785
786         BT_DBG("sk %p state %d", sk, sk->sk_state);
787
788         /* Kill poor orphan */
789
790         l2cap_chan_destroy(l2cap_pi(sk)->chan);
791         sock_set_flag(sk, SOCK_DEAD);
792         sock_put(sk);
793 }
794
795 static int l2cap_sock_shutdown(struct socket *sock, int how)
796 {
797         struct sock *sk = sock->sk;
798         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
799         int err = 0;
800
801         BT_DBG("sock %p, sk %p", sock, sk);
802
803         if (!sk)
804                 return 0;
805
806         lock_sock(sk);
807         if (!sk->sk_shutdown) {
808                 if (chan->mode == L2CAP_MODE_ERTM)
809                         err = __l2cap_wait_ack(sk);
810
811                 sk->sk_shutdown = SHUTDOWN_MASK;
812                 l2cap_chan_close(chan, 0);
813
814                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
815                         err = bt_sock_wait_state(sk, BT_CLOSED,
816                                                         sk->sk_lingertime);
817         }
818
819         if (!err && sk->sk_err)
820                 err = -sk->sk_err;
821
822         release_sock(sk);
823         return err;
824 }
825
826 static int l2cap_sock_release(struct socket *sock)
827 {
828         struct sock *sk = sock->sk;
829         int err;
830
831         BT_DBG("sock %p, sk %p", sock, sk);
832
833         if (!sk)
834                 return 0;
835
836         err = l2cap_sock_shutdown(sock, 2);
837
838         sock_orphan(sk);
839         l2cap_sock_kill(sk);
840         return err;
841 }
842
843 static struct l2cap_chan *l2cap_sock_new_connection_cb(void *data)
844 {
845         struct sock *sk, *parent = data;
846
847         sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
848                                                                 GFP_ATOMIC);
849         if (!sk)
850                 return NULL;
851
852         bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
853
854         l2cap_sock_init(sk, parent);
855
856         return l2cap_pi(sk)->chan;
857 }
858
859 static int l2cap_sock_recv_cb(void *data, struct sk_buff *skb)
860 {
861         int err;
862         struct sock *sk = data;
863         struct l2cap_pinfo *pi = l2cap_pi(sk);
864
865         if (pi->rx_busy_skb)
866                 return -ENOMEM;
867
868         err = sock_queue_rcv_skb(sk, skb);
869
870         /* For ERTM, handle one skb that doesn't fit into the recv
871          * buffer.  This is important to do because the data frames
872          * have already been acked, so the skb cannot be discarded.
873          *
874          * Notify the l2cap core that the buffer is full, so the
875          * LOCAL_BUSY state is entered and no more frames are
876          * acked and reassembled until there is buffer space
877          * available.
878          */
879         if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
880                 pi->rx_busy_skb = skb;
881                 l2cap_chan_busy(pi->chan, 1);
882                 err = 0;
883         }
884
885         return err;
886 }
887
888 static void l2cap_sock_close_cb(void *data)
889 {
890         struct sock *sk = data;
891
892         l2cap_sock_kill(sk);
893 }
894
895 static void l2cap_sock_state_change_cb(void *data, int state)
896 {
897         struct sock *sk = data;
898
899         sk->sk_state = state;
900 }
901
902 static struct l2cap_ops l2cap_chan_ops = {
903         .name           = "L2CAP Socket Interface",
904         .new_connection = l2cap_sock_new_connection_cb,
905         .recv           = l2cap_sock_recv_cb,
906         .close          = l2cap_sock_close_cb,
907         .state_change   = l2cap_sock_state_change_cb,
908 };
909
910 static void l2cap_sock_destruct(struct sock *sk)
911 {
912         BT_DBG("sk %p", sk);
913
914         if (l2cap_pi(sk)->rx_busy_skb) {
915                 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
916                 l2cap_pi(sk)->rx_busy_skb = NULL;
917         }
918
919         skb_queue_purge(&sk->sk_receive_queue);
920         skb_queue_purge(&sk->sk_write_queue);
921 }
922
923 static void l2cap_sock_init(struct sock *sk, struct sock *parent)
924 {
925         struct l2cap_pinfo *pi = l2cap_pi(sk);
926         struct l2cap_chan *chan = pi->chan;
927
928         BT_DBG("sk %p", sk);
929
930         if (parent) {
931                 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
932
933                 sk->sk_type = parent->sk_type;
934                 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
935
936                 chan->chan_type = pchan->chan_type;
937                 chan->imtu = pchan->imtu;
938                 chan->omtu = pchan->omtu;
939                 chan->conf_state = pchan->conf_state;
940                 chan->mode = pchan->mode;
941                 chan->fcs  = pchan->fcs;
942                 chan->max_tx = pchan->max_tx;
943                 chan->tx_win = pchan->tx_win;
944                 chan->tx_win_max = pchan->tx_win_max;
945                 chan->sec_level = pchan->sec_level;
946                 chan->flags = pchan->flags;
947
948                 security_sk_clone(parent, sk);
949         } else {
950
951                 switch (sk->sk_type) {
952                 case SOCK_RAW:
953                         chan->chan_type = L2CAP_CHAN_RAW;
954                         break;
955                 case SOCK_DGRAM:
956                         chan->chan_type = L2CAP_CHAN_CONN_LESS;
957                         break;
958                 case SOCK_SEQPACKET:
959                 case SOCK_STREAM:
960                         chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
961                         break;
962                 }
963
964                 chan->imtu = L2CAP_DEFAULT_MTU;
965                 chan->omtu = 0;
966                 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
967                         chan->mode = L2CAP_MODE_ERTM;
968                         set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
969                 } else {
970                         chan->mode = L2CAP_MODE_BASIC;
971                 }
972                 chan->max_tx = L2CAP_DEFAULT_MAX_TX;
973                 chan->fcs  = L2CAP_FCS_CRC16;
974                 chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
975                 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
976                 chan->sec_level = BT_SECURITY_LOW;
977                 chan->flags = 0;
978                 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
979         }
980
981         /* Default config options */
982         chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
983
984         chan->data = sk;
985         chan->ops = &l2cap_chan_ops;
986 }
987
988 static struct proto l2cap_proto = {
989         .name           = "L2CAP",
990         .owner          = THIS_MODULE,
991         .obj_size       = sizeof(struct l2cap_pinfo)
992 };
993
994 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
995 {
996         struct sock *sk;
997         struct l2cap_chan *chan;
998
999         sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1000         if (!sk)
1001                 return NULL;
1002
1003         sock_init_data(sock, sk);
1004         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1005
1006         sk->sk_destruct = l2cap_sock_destruct;
1007         sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
1008
1009         sock_reset_flag(sk, SOCK_ZAPPED);
1010
1011         sk->sk_protocol = proto;
1012         sk->sk_state = BT_OPEN;
1013
1014         chan = l2cap_chan_create(sk);
1015         if (!chan) {
1016                 l2cap_sock_kill(sk);
1017                 return NULL;
1018         }
1019
1020         l2cap_pi(sk)->chan = chan;
1021
1022         return sk;
1023 }
1024
1025 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1026                              int kern)
1027 {
1028         struct sock *sk;
1029
1030         BT_DBG("sock %p", sock);
1031
1032         sock->state = SS_UNCONNECTED;
1033
1034         if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1035                         sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1036                 return -ESOCKTNOSUPPORT;
1037
1038         if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1039                 return -EPERM;
1040
1041         sock->ops = &l2cap_sock_ops;
1042
1043         sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1044         if (!sk)
1045                 return -ENOMEM;
1046
1047         l2cap_sock_init(sk, NULL);
1048         return 0;
1049 }
1050
1051 static const struct proto_ops l2cap_sock_ops = {
1052         .family         = PF_BLUETOOTH,
1053         .owner          = THIS_MODULE,
1054         .release        = l2cap_sock_release,
1055         .bind           = l2cap_sock_bind,
1056         .connect        = l2cap_sock_connect,
1057         .listen         = l2cap_sock_listen,
1058         .accept         = l2cap_sock_accept,
1059         .getname        = l2cap_sock_getname,
1060         .sendmsg        = l2cap_sock_sendmsg,
1061         .recvmsg        = l2cap_sock_recvmsg,
1062         .poll           = bt_sock_poll,
1063         .ioctl          = bt_sock_ioctl,
1064         .mmap           = sock_no_mmap,
1065         .socketpair     = sock_no_socketpair,
1066         .shutdown       = l2cap_sock_shutdown,
1067         .setsockopt     = l2cap_sock_setsockopt,
1068         .getsockopt     = l2cap_sock_getsockopt
1069 };
1070
1071 static const struct net_proto_family l2cap_sock_family_ops = {
1072         .family = PF_BLUETOOTH,
1073         .owner  = THIS_MODULE,
1074         .create = l2cap_sock_create,
1075 };
1076
1077 int __init l2cap_init_sockets(void)
1078 {
1079         int err;
1080
1081         err = proto_register(&l2cap_proto, 0);
1082         if (err < 0)
1083                 return err;
1084
1085         err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1086         if (err < 0)
1087                 goto error;
1088
1089         BT_INFO("L2CAP socket layer initialized");
1090
1091         return 0;
1092
1093 error:
1094         BT_ERR("L2CAP socket registration failed");
1095         proto_unregister(&l2cap_proto);
1096         return err;
1097 }
1098
1099 void l2cap_cleanup_sockets(void)
1100 {
1101         if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1102                 BT_ERR("L2CAP socket unregistration failed");
1103
1104         proto_unregister(&l2cap_proto);
1105 }