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