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

Archive Download this file



interactive