usb: gadget: webcam: Make g_webcam loadable again
[platform/kernel/linux-starfive.git] / net / bluetooth / iso.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * BlueZ - Bluetooth protocol stack for Linux
4  *
5  * Copyright (C) 2022 Intel Corporation
6  * Copyright 2023 NXP
7  */
8
9 #include <linux/module.h>
10 #include <linux/debugfs.h>
11 #include <linux/seq_file.h>
12 #include <linux/sched/signal.h>
13
14 #include <net/bluetooth/bluetooth.h>
15 #include <net/bluetooth/hci_core.h>
16 #include <net/bluetooth/iso.h>
17
18 static const struct proto_ops iso_sock_ops;
19
20 static struct bt_sock_list iso_sk_list = {
21         .lock = __RW_LOCK_UNLOCKED(iso_sk_list.lock)
22 };
23
24 /* ---- ISO connections ---- */
25 struct iso_conn {
26         struct hci_conn *hcon;
27
28         /* @lock: spinlock protecting changes to iso_conn fields */
29         spinlock_t      lock;
30         struct sock     *sk;
31
32         struct delayed_work     timeout_work;
33
34         struct sk_buff  *rx_skb;
35         __u32           rx_len;
36         __u16           tx_sn;
37 };
38
39 #define iso_conn_lock(c)        spin_lock(&(c)->lock)
40 #define iso_conn_unlock(c)      spin_unlock(&(c)->lock)
41
42 static void iso_sock_close(struct sock *sk);
43 static void iso_sock_kill(struct sock *sk);
44
45 /* ----- ISO socket info ----- */
46 #define iso_pi(sk) ((struct iso_pinfo *)sk)
47
48 #define EIR_SERVICE_DATA_LENGTH 4
49 #define BASE_MAX_LENGTH (HCI_MAX_PER_AD_LENGTH - EIR_SERVICE_DATA_LENGTH)
50
51 /* iso_pinfo flags values */
52 enum {
53         BT_SK_BIG_SYNC,
54         BT_SK_PA_SYNC,
55 };
56
57 struct iso_pinfo {
58         struct bt_sock          bt;
59         bdaddr_t                src;
60         __u8                    src_type;
61         bdaddr_t                dst;
62         __u8                    dst_type;
63         __u8                    bc_sid;
64         __u8                    bc_num_bis;
65         __u8                    bc_bis[ISO_MAX_NUM_BIS];
66         __u16                   sync_handle;
67         unsigned long           flags;
68         struct bt_iso_qos       qos;
69         bool                    qos_user_set;
70         __u8                    base_len;
71         __u8                    base[BASE_MAX_LENGTH];
72         struct iso_conn         *conn;
73 };
74
75 static struct bt_iso_qos default_qos;
76
77 static bool check_ucast_qos(struct bt_iso_qos *qos);
78 static bool check_bcast_qos(struct bt_iso_qos *qos);
79 static bool iso_match_sid(struct sock *sk, void *data);
80 static bool iso_match_sync_handle(struct sock *sk, void *data);
81 static void iso_sock_disconn(struct sock *sk);
82
83 /* ---- ISO timers ---- */
84 #define ISO_CONN_TIMEOUT        (HZ * 40)
85 #define ISO_DISCONN_TIMEOUT     (HZ * 2)
86
87 static void iso_sock_timeout(struct work_struct *work)
88 {
89         struct iso_conn *conn = container_of(work, struct iso_conn,
90                                              timeout_work.work);
91         struct sock *sk;
92
93         iso_conn_lock(conn);
94         sk = conn->sk;
95         if (sk)
96                 sock_hold(sk);
97         iso_conn_unlock(conn);
98
99         if (!sk)
100                 return;
101
102         BT_DBG("sock %p state %d", sk, sk->sk_state);
103
104         lock_sock(sk);
105         sk->sk_err = ETIMEDOUT;
106         sk->sk_state_change(sk);
107         release_sock(sk);
108         sock_put(sk);
109 }
110
111 static void iso_sock_set_timer(struct sock *sk, long timeout)
112 {
113         if (!iso_pi(sk)->conn)
114                 return;
115
116         BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
117         cancel_delayed_work(&iso_pi(sk)->conn->timeout_work);
118         schedule_delayed_work(&iso_pi(sk)->conn->timeout_work, timeout);
119 }
120
121 static void iso_sock_clear_timer(struct sock *sk)
122 {
123         if (!iso_pi(sk)->conn)
124                 return;
125
126         BT_DBG("sock %p state %d", sk, sk->sk_state);
127         cancel_delayed_work(&iso_pi(sk)->conn->timeout_work);
128 }
129
130 /* ---- ISO connections ---- */
131 static struct iso_conn *iso_conn_add(struct hci_conn *hcon)
132 {
133         struct iso_conn *conn = hcon->iso_data;
134
135         if (conn) {
136                 if (!conn->hcon)
137                         conn->hcon = hcon;
138                 return conn;
139         }
140
141         conn = kzalloc(sizeof(*conn), GFP_KERNEL);
142         if (!conn)
143                 return NULL;
144
145         spin_lock_init(&conn->lock);
146         INIT_DELAYED_WORK(&conn->timeout_work, iso_sock_timeout);
147
148         hcon->iso_data = conn;
149         conn->hcon = hcon;
150         conn->tx_sn = 0;
151
152         BT_DBG("hcon %p conn %p", hcon, conn);
153
154         return conn;
155 }
156
157 /* Delete channel. Must be called on the locked socket. */
158 static void iso_chan_del(struct sock *sk, int err)
159 {
160         struct iso_conn *conn;
161         struct sock *parent;
162
163         conn = iso_pi(sk)->conn;
164
165         BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
166
167         if (conn) {
168                 iso_conn_lock(conn);
169                 conn->sk = NULL;
170                 iso_pi(sk)->conn = NULL;
171                 iso_conn_unlock(conn);
172
173                 if (conn->hcon)
174                         hci_conn_drop(conn->hcon);
175         }
176
177         sk->sk_state = BT_CLOSED;
178         sk->sk_err   = err;
179
180         parent = bt_sk(sk)->parent;
181         if (parent) {
182                 bt_accept_unlink(sk);
183                 parent->sk_data_ready(parent);
184         } else {
185                 sk->sk_state_change(sk);
186         }
187
188         sock_set_flag(sk, SOCK_ZAPPED);
189 }
190
191 static void iso_conn_del(struct hci_conn *hcon, int err)
192 {
193         struct iso_conn *conn = hcon->iso_data;
194         struct sock *sk;
195
196         if (!conn)
197                 return;
198
199         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
200
201         /* Kill socket */
202         iso_conn_lock(conn);
203         sk = conn->sk;
204         if (sk)
205                 sock_hold(sk);
206         iso_conn_unlock(conn);
207
208         if (sk) {
209                 lock_sock(sk);
210                 iso_sock_clear_timer(sk);
211                 iso_chan_del(sk, err);
212                 release_sock(sk);
213                 sock_put(sk);
214         }
215
216         /* Ensure no more work items will run before freeing conn. */
217         cancel_delayed_work_sync(&conn->timeout_work);
218
219         hcon->iso_data = NULL;
220         kfree(conn);
221 }
222
223 static int __iso_chan_add(struct iso_conn *conn, struct sock *sk,
224                           struct sock *parent)
225 {
226         BT_DBG("conn %p", conn);
227
228         if (iso_pi(sk)->conn == conn && conn->sk == sk)
229                 return 0;
230
231         if (conn->sk) {
232                 BT_ERR("conn->sk already set");
233                 return -EBUSY;
234         }
235
236         iso_pi(sk)->conn = conn;
237         conn->sk = sk;
238
239         if (parent)
240                 bt_accept_enqueue(parent, sk, true);
241
242         return 0;
243 }
244
245 static int iso_chan_add(struct iso_conn *conn, struct sock *sk,
246                         struct sock *parent)
247 {
248         int err;
249
250         iso_conn_lock(conn);
251         err = __iso_chan_add(conn, sk, parent);
252         iso_conn_unlock(conn);
253
254         return err;
255 }
256
257 static inline u8 le_addr_type(u8 bdaddr_type)
258 {
259         if (bdaddr_type == BDADDR_LE_PUBLIC)
260                 return ADDR_LE_DEV_PUBLIC;
261         else
262                 return ADDR_LE_DEV_RANDOM;
263 }
264
265 static int iso_connect_bis(struct sock *sk)
266 {
267         struct iso_conn *conn;
268         struct hci_conn *hcon;
269         struct hci_dev  *hdev;
270         int err;
271
272         BT_DBG("%pMR", &iso_pi(sk)->src);
273
274         hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src,
275                              iso_pi(sk)->src_type);
276         if (!hdev)
277                 return -EHOSTUNREACH;
278
279         hci_dev_lock(hdev);
280
281         if (!bis_capable(hdev)) {
282                 err = -EOPNOTSUPP;
283                 goto unlock;
284         }
285
286         /* Fail if user set invalid QoS */
287         if (iso_pi(sk)->qos_user_set && !check_bcast_qos(&iso_pi(sk)->qos)) {
288                 iso_pi(sk)->qos = default_qos;
289                 err = -EINVAL;
290                 goto unlock;
291         }
292
293         /* Fail if out PHYs are marked as disabled */
294         if (!iso_pi(sk)->qos.bcast.out.phy) {
295                 err = -EINVAL;
296                 goto unlock;
297         }
298
299         /* Just bind if DEFER_SETUP has been set */
300         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
301                 hcon = hci_bind_bis(hdev, &iso_pi(sk)->dst,
302                                     &iso_pi(sk)->qos, iso_pi(sk)->base_len,
303                                     iso_pi(sk)->base);
304                 if (IS_ERR(hcon)) {
305                         err = PTR_ERR(hcon);
306                         goto unlock;
307                 }
308         } else {
309                 hcon = hci_connect_bis(hdev, &iso_pi(sk)->dst,
310                                        le_addr_type(iso_pi(sk)->dst_type),
311                                        &iso_pi(sk)->qos, iso_pi(sk)->base_len,
312                                        iso_pi(sk)->base);
313                 if (IS_ERR(hcon)) {
314                         err = PTR_ERR(hcon);
315                         goto unlock;
316                 }
317         }
318
319         conn = iso_conn_add(hcon);
320         if (!conn) {
321                 hci_conn_drop(hcon);
322                 err = -ENOMEM;
323                 goto unlock;
324         }
325
326         lock_sock(sk);
327
328         err = iso_chan_add(conn, sk, NULL);
329         if (err) {
330                 release_sock(sk);
331                 goto unlock;
332         }
333
334         /* Update source addr of the socket */
335         bacpy(&iso_pi(sk)->src, &hcon->src);
336
337         if (hcon->state == BT_CONNECTED) {
338                 iso_sock_clear_timer(sk);
339                 sk->sk_state = BT_CONNECTED;
340         } else if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
341                 iso_sock_clear_timer(sk);
342                 sk->sk_state = BT_CONNECT;
343         } else {
344                 sk->sk_state = BT_CONNECT;
345                 iso_sock_set_timer(sk, sk->sk_sndtimeo);
346         }
347
348         release_sock(sk);
349
350 unlock:
351         hci_dev_unlock(hdev);
352         hci_dev_put(hdev);
353         return err;
354 }
355
356 static int iso_connect_cis(struct sock *sk)
357 {
358         struct iso_conn *conn;
359         struct hci_conn *hcon;
360         struct hci_dev  *hdev;
361         int err;
362
363         BT_DBG("%pMR -> %pMR", &iso_pi(sk)->src, &iso_pi(sk)->dst);
364
365         hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src,
366                              iso_pi(sk)->src_type);
367         if (!hdev)
368                 return -EHOSTUNREACH;
369
370         hci_dev_lock(hdev);
371
372         if (!cis_central_capable(hdev)) {
373                 err = -EOPNOTSUPP;
374                 goto unlock;
375         }
376
377         /* Fail if user set invalid QoS */
378         if (iso_pi(sk)->qos_user_set && !check_ucast_qos(&iso_pi(sk)->qos)) {
379                 iso_pi(sk)->qos = default_qos;
380                 err = -EINVAL;
381                 goto unlock;
382         }
383
384         /* Fail if either PHYs are marked as disabled */
385         if (!iso_pi(sk)->qos.ucast.in.phy && !iso_pi(sk)->qos.ucast.out.phy) {
386                 err = -EINVAL;
387                 goto unlock;
388         }
389
390         /* Just bind if DEFER_SETUP has been set */
391         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
392                 hcon = hci_bind_cis(hdev, &iso_pi(sk)->dst,
393                                     le_addr_type(iso_pi(sk)->dst_type),
394                                     &iso_pi(sk)->qos);
395                 if (IS_ERR(hcon)) {
396                         err = PTR_ERR(hcon);
397                         goto unlock;
398                 }
399         } else {
400                 hcon = hci_connect_cis(hdev, &iso_pi(sk)->dst,
401                                        le_addr_type(iso_pi(sk)->dst_type),
402                                        &iso_pi(sk)->qos);
403                 if (IS_ERR(hcon)) {
404                         err = PTR_ERR(hcon);
405                         goto unlock;
406                 }
407         }
408
409         conn = iso_conn_add(hcon);
410         if (!conn) {
411                 hci_conn_drop(hcon);
412                 err = -ENOMEM;
413                 goto unlock;
414         }
415
416         lock_sock(sk);
417
418         err = iso_chan_add(conn, sk, NULL);
419         if (err) {
420                 release_sock(sk);
421                 goto unlock;
422         }
423
424         /* Update source addr of the socket */
425         bacpy(&iso_pi(sk)->src, &hcon->src);
426
427         if (hcon->state == BT_CONNECTED) {
428                 iso_sock_clear_timer(sk);
429                 sk->sk_state = BT_CONNECTED;
430         } else if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
431                 iso_sock_clear_timer(sk);
432                 sk->sk_state = BT_CONNECT;
433         } else {
434                 sk->sk_state = BT_CONNECT;
435                 iso_sock_set_timer(sk, sk->sk_sndtimeo);
436         }
437
438         release_sock(sk);
439
440 unlock:
441         hci_dev_unlock(hdev);
442         hci_dev_put(hdev);
443         return err;
444 }
445
446 static struct bt_iso_qos *iso_sock_get_qos(struct sock *sk)
447 {
448         if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONNECT2)
449                 return &iso_pi(sk)->conn->hcon->iso_qos;
450
451         return &iso_pi(sk)->qos;
452 }
453
454 static int iso_send_frame(struct sock *sk, struct sk_buff *skb)
455 {
456         struct iso_conn *conn = iso_pi(sk)->conn;
457         struct bt_iso_qos *qos = iso_sock_get_qos(sk);
458         struct hci_iso_data_hdr *hdr;
459         int len = 0;
460
461         BT_DBG("sk %p len %d", sk, skb->len);
462
463         if (skb->len > qos->ucast.out.sdu)
464                 return -EMSGSIZE;
465
466         len = skb->len;
467
468         /* Push ISO data header */
469         hdr = skb_push(skb, HCI_ISO_DATA_HDR_SIZE);
470         hdr->sn = cpu_to_le16(conn->tx_sn++);
471         hdr->slen = cpu_to_le16(hci_iso_data_len_pack(len,
472                                                       HCI_ISO_STATUS_VALID));
473
474         if (sk->sk_state == BT_CONNECTED)
475                 hci_send_iso(conn->hcon, skb);
476         else
477                 len = -ENOTCONN;
478
479         return len;
480 }
481
482 static void iso_recv_frame(struct iso_conn *conn, struct sk_buff *skb)
483 {
484         struct sock *sk;
485
486         iso_conn_lock(conn);
487         sk = conn->sk;
488         iso_conn_unlock(conn);
489
490         if (!sk)
491                 goto drop;
492
493         BT_DBG("sk %p len %d", sk, skb->len);
494
495         if (sk->sk_state != BT_CONNECTED)
496                 goto drop;
497
498         if (!sock_queue_rcv_skb(sk, skb))
499                 return;
500
501 drop:
502         kfree_skb(skb);
503 }
504
505 /* -------- Socket interface ---------- */
506 static struct sock *__iso_get_sock_listen_by_addr(bdaddr_t *src, bdaddr_t *dst)
507 {
508         struct sock *sk;
509
510         sk_for_each(sk, &iso_sk_list.head) {
511                 if (sk->sk_state != BT_LISTEN)
512                         continue;
513
514                 if (bacmp(&iso_pi(sk)->dst, dst))
515                         continue;
516
517                 if (!bacmp(&iso_pi(sk)->src, src))
518                         return sk;
519         }
520
521         return NULL;
522 }
523
524 static struct sock *__iso_get_sock_listen_by_sid(bdaddr_t *ba, bdaddr_t *bc,
525                                                  __u8 sid)
526 {
527         struct sock *sk;
528
529         sk_for_each(sk, &iso_sk_list.head) {
530                 if (sk->sk_state != BT_LISTEN)
531                         continue;
532
533                 if (bacmp(&iso_pi(sk)->src, ba))
534                         continue;
535
536                 if (bacmp(&iso_pi(sk)->dst, bc))
537                         continue;
538
539                 if (iso_pi(sk)->bc_sid == sid)
540                         return sk;
541         }
542
543         return NULL;
544 }
545
546 typedef bool (*iso_sock_match_t)(struct sock *sk, void *data);
547
548 /* Find socket listening:
549  * source bdaddr (Unicast)
550  * destination bdaddr (Broadcast only)
551  * match func - pass NULL to ignore
552  * match func data - pass -1 to ignore
553  * Returns closest match.
554  */
555 static struct sock *iso_get_sock_listen(bdaddr_t *src, bdaddr_t *dst,
556                                         iso_sock_match_t match, void *data)
557 {
558         struct sock *sk = NULL, *sk1 = NULL;
559
560         read_lock(&iso_sk_list.lock);
561
562         sk_for_each(sk, &iso_sk_list.head) {
563                 if (sk->sk_state != BT_LISTEN)
564                         continue;
565
566                 /* Match Broadcast destination */
567                 if (bacmp(dst, BDADDR_ANY) && bacmp(&iso_pi(sk)->dst, dst))
568                         continue;
569
570                 /* Use Match function if provided */
571                 if (match && !match(sk, data))
572                         continue;
573
574                 /* Exact match. */
575                 if (!bacmp(&iso_pi(sk)->src, src))
576                         break;
577
578                 /* Closest match */
579                 if (!bacmp(&iso_pi(sk)->src, BDADDR_ANY))
580                         sk1 = sk;
581         }
582
583         read_unlock(&iso_sk_list.lock);
584
585         return sk ? sk : sk1;
586 }
587
588 static void iso_sock_destruct(struct sock *sk)
589 {
590         BT_DBG("sk %p", sk);
591
592         skb_queue_purge(&sk->sk_receive_queue);
593         skb_queue_purge(&sk->sk_write_queue);
594 }
595
596 static void iso_sock_cleanup_listen(struct sock *parent)
597 {
598         struct sock *sk;
599
600         BT_DBG("parent %p", parent);
601
602         /* Close not yet accepted channels */
603         while ((sk = bt_accept_dequeue(parent, NULL))) {
604                 iso_sock_close(sk);
605                 iso_sock_kill(sk);
606         }
607
608         /* If listening socket stands for a PA sync connection,
609          * properly disconnect the hcon and socket.
610          */
611         if (iso_pi(parent)->conn && iso_pi(parent)->conn->hcon &&
612             test_bit(HCI_CONN_PA_SYNC, &iso_pi(parent)->conn->hcon->flags)) {
613                 iso_sock_disconn(parent);
614                 return;
615         }
616
617         parent->sk_state  = BT_CLOSED;
618         sock_set_flag(parent, SOCK_ZAPPED);
619 }
620
621 /* Kill socket (only if zapped and orphan)
622  * Must be called on unlocked socket.
623  */
624 static void iso_sock_kill(struct sock *sk)
625 {
626         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket ||
627             sock_flag(sk, SOCK_DEAD))
628                 return;
629
630         BT_DBG("sk %p state %d", sk, sk->sk_state);
631
632         /* Kill poor orphan */
633         bt_sock_unlink(&iso_sk_list, sk);
634         sock_set_flag(sk, SOCK_DEAD);
635         sock_put(sk);
636 }
637
638 static void iso_sock_disconn(struct sock *sk)
639 {
640         sk->sk_state = BT_DISCONN;
641         iso_sock_set_timer(sk, ISO_DISCONN_TIMEOUT);
642         iso_conn_lock(iso_pi(sk)->conn);
643         hci_conn_drop(iso_pi(sk)->conn->hcon);
644         iso_pi(sk)->conn->hcon = NULL;
645         iso_conn_unlock(iso_pi(sk)->conn);
646 }
647
648 static void __iso_sock_close(struct sock *sk)
649 {
650         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
651
652         switch (sk->sk_state) {
653         case BT_LISTEN:
654                 iso_sock_cleanup_listen(sk);
655                 break;
656
657         case BT_CONNECT:
658         case BT_CONNECTED:
659         case BT_CONFIG:
660                 if (iso_pi(sk)->conn->hcon)
661                         iso_sock_disconn(sk);
662                 else
663                         iso_chan_del(sk, ECONNRESET);
664                 break;
665
666         case BT_CONNECT2:
667                 if (iso_pi(sk)->conn->hcon &&
668                     (test_bit(HCI_CONN_PA_SYNC, &iso_pi(sk)->conn->hcon->flags) ||
669                     test_bit(HCI_CONN_PA_SYNC_FAILED, &iso_pi(sk)->conn->hcon->flags)))
670                         iso_sock_disconn(sk);
671                 else
672                         iso_chan_del(sk, ECONNRESET);
673                 break;
674         case BT_DISCONN:
675                 iso_chan_del(sk, ECONNRESET);
676                 break;
677
678         default:
679                 sock_set_flag(sk, SOCK_ZAPPED);
680                 break;
681         }
682 }
683
684 /* Must be called on unlocked socket. */
685 static void iso_sock_close(struct sock *sk)
686 {
687         iso_sock_clear_timer(sk);
688         lock_sock(sk);
689         __iso_sock_close(sk);
690         release_sock(sk);
691         iso_sock_kill(sk);
692 }
693
694 static void iso_sock_init(struct sock *sk, struct sock *parent)
695 {
696         BT_DBG("sk %p", sk);
697
698         if (parent) {
699                 sk->sk_type = parent->sk_type;
700                 bt_sk(sk)->flags = bt_sk(parent)->flags;
701                 security_sk_clone(parent, sk);
702         }
703 }
704
705 static struct proto iso_proto = {
706         .name           = "ISO",
707         .owner          = THIS_MODULE,
708         .obj_size       = sizeof(struct iso_pinfo)
709 };
710
711 #define DEFAULT_IO_QOS \
712 { \
713         .interval       = 10000u, \
714         .latency        = 10u, \
715         .sdu            = 40u, \
716         .phy            = BT_ISO_PHY_2M, \
717         .rtn            = 2u, \
718 }
719
720 static struct bt_iso_qos default_qos = {
721         .bcast = {
722                 .big                    = BT_ISO_QOS_BIG_UNSET,
723                 .bis                    = BT_ISO_QOS_BIS_UNSET,
724                 .sync_factor            = 0x01,
725                 .packing                = 0x00,
726                 .framing                = 0x00,
727                 .in                     = DEFAULT_IO_QOS,
728                 .out                    = DEFAULT_IO_QOS,
729                 .encryption             = 0x00,
730                 .bcode                  = {0x00},
731                 .options                = 0x00,
732                 .skip                   = 0x0000,
733                 .sync_timeout           = 0x4000,
734                 .sync_cte_type          = 0x00,
735                 .mse                    = 0x00,
736                 .timeout                = 0x4000,
737         },
738 };
739
740 static struct sock *iso_sock_alloc(struct net *net, struct socket *sock,
741                                    int proto, gfp_t prio, int kern)
742 {
743         struct sock *sk;
744
745         sk = bt_sock_alloc(net, sock, &iso_proto, proto, prio, kern);
746         if (!sk)
747                 return NULL;
748
749         sk->sk_destruct = iso_sock_destruct;
750         sk->sk_sndtimeo = ISO_CONN_TIMEOUT;
751
752         /* Set address type as public as default src address is BDADDR_ANY */
753         iso_pi(sk)->src_type = BDADDR_LE_PUBLIC;
754
755         iso_pi(sk)->qos = default_qos;
756
757         bt_sock_link(&iso_sk_list, sk);
758         return sk;
759 }
760
761 static int iso_sock_create(struct net *net, struct socket *sock, int protocol,
762                            int kern)
763 {
764         struct sock *sk;
765
766         BT_DBG("sock %p", sock);
767
768         sock->state = SS_UNCONNECTED;
769
770         if (sock->type != SOCK_SEQPACKET)
771                 return -ESOCKTNOSUPPORT;
772
773         sock->ops = &iso_sock_ops;
774
775         sk = iso_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
776         if (!sk)
777                 return -ENOMEM;
778
779         iso_sock_init(sk, NULL);
780         return 0;
781 }
782
783 static int iso_sock_bind_bc(struct socket *sock, struct sockaddr *addr,
784                             int addr_len)
785 {
786         struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;
787         struct sock *sk = sock->sk;
788         int i;
789
790         BT_DBG("sk %p bc_sid %u bc_num_bis %u", sk, sa->iso_bc->bc_sid,
791                sa->iso_bc->bc_num_bis);
792
793         if (addr_len > sizeof(*sa) + sizeof(*sa->iso_bc) ||
794             sa->iso_bc->bc_num_bis < 0x01 || sa->iso_bc->bc_num_bis > 0x1f)
795                 return -EINVAL;
796
797         bacpy(&iso_pi(sk)->dst, &sa->iso_bc->bc_bdaddr);
798         iso_pi(sk)->dst_type = sa->iso_bc->bc_bdaddr_type;
799         iso_pi(sk)->sync_handle = -1;
800         iso_pi(sk)->bc_sid = sa->iso_bc->bc_sid;
801         iso_pi(sk)->bc_num_bis = sa->iso_bc->bc_num_bis;
802
803         for (i = 0; i < iso_pi(sk)->bc_num_bis; i++) {
804                 if (sa->iso_bc->bc_bis[i] < 0x01 ||
805                     sa->iso_bc->bc_bis[i] > 0x1f)
806                         return -EINVAL;
807
808                 memcpy(iso_pi(sk)->bc_bis, sa->iso_bc->bc_bis,
809                        iso_pi(sk)->bc_num_bis);
810         }
811
812         return 0;
813 }
814
815 static int iso_sock_bind(struct socket *sock, struct sockaddr *addr,
816                          int addr_len)
817 {
818         struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;
819         struct sock *sk = sock->sk;
820         int err = 0;
821
822         BT_DBG("sk %p %pMR type %u", sk, &sa->iso_bdaddr, sa->iso_bdaddr_type);
823
824         if (!addr || addr_len < sizeof(struct sockaddr_iso) ||
825             addr->sa_family != AF_BLUETOOTH)
826                 return -EINVAL;
827
828         lock_sock(sk);
829
830         if (sk->sk_state != BT_OPEN) {
831                 err = -EBADFD;
832                 goto done;
833         }
834
835         if (sk->sk_type != SOCK_SEQPACKET) {
836                 err = -EINVAL;
837                 goto done;
838         }
839
840         /* Check if the address type is of LE type */
841         if (!bdaddr_type_is_le(sa->iso_bdaddr_type)) {
842                 err = -EINVAL;
843                 goto done;
844         }
845
846         bacpy(&iso_pi(sk)->src, &sa->iso_bdaddr);
847         iso_pi(sk)->src_type = sa->iso_bdaddr_type;
848
849         /* Check for Broadcast address */
850         if (addr_len > sizeof(*sa)) {
851                 err = iso_sock_bind_bc(sock, addr, addr_len);
852                 if (err)
853                         goto done;
854         }
855
856         sk->sk_state = BT_BOUND;
857
858 done:
859         release_sock(sk);
860         return err;
861 }
862
863 static int iso_sock_connect(struct socket *sock, struct sockaddr *addr,
864                             int alen, int flags)
865 {
866         struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;
867         struct sock *sk = sock->sk;
868         int err;
869
870         BT_DBG("sk %p", sk);
871
872         if (alen < sizeof(struct sockaddr_iso) ||
873             addr->sa_family != AF_BLUETOOTH)
874                 return -EINVAL;
875
876         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
877                 return -EBADFD;
878
879         if (sk->sk_type != SOCK_SEQPACKET)
880                 return -EINVAL;
881
882         /* Check if the address type is of LE type */
883         if (!bdaddr_type_is_le(sa->iso_bdaddr_type))
884                 return -EINVAL;
885
886         lock_sock(sk);
887
888         bacpy(&iso_pi(sk)->dst, &sa->iso_bdaddr);
889         iso_pi(sk)->dst_type = sa->iso_bdaddr_type;
890
891         release_sock(sk);
892
893         if (bacmp(&iso_pi(sk)->dst, BDADDR_ANY))
894                 err = iso_connect_cis(sk);
895         else
896                 err = iso_connect_bis(sk);
897
898         if (err)
899                 return err;
900
901         lock_sock(sk);
902
903         if (!test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
904                 err = bt_sock_wait_state(sk, BT_CONNECTED,
905                                          sock_sndtimeo(sk, flags & O_NONBLOCK));
906         }
907
908         release_sock(sk);
909         return err;
910 }
911
912 static int iso_listen_bis(struct sock *sk)
913 {
914         struct hci_dev *hdev;
915         int err = 0;
916
917         BT_DBG("%pMR -> %pMR (SID 0x%2.2x)", &iso_pi(sk)->src,
918                &iso_pi(sk)->dst, iso_pi(sk)->bc_sid);
919
920         write_lock(&iso_sk_list.lock);
921
922         if (__iso_get_sock_listen_by_sid(&iso_pi(sk)->src, &iso_pi(sk)->dst,
923                                          iso_pi(sk)->bc_sid))
924                 err = -EADDRINUSE;
925
926         write_unlock(&iso_sk_list.lock);
927
928         if (err)
929                 return err;
930
931         hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src,
932                              iso_pi(sk)->src_type);
933         if (!hdev)
934                 return -EHOSTUNREACH;
935
936         /* Fail if user set invalid QoS */
937         if (iso_pi(sk)->qos_user_set && !check_bcast_qos(&iso_pi(sk)->qos)) {
938                 iso_pi(sk)->qos = default_qos;
939                 return -EINVAL;
940         }
941
942         err = hci_pa_create_sync(hdev, &iso_pi(sk)->dst,
943                                  le_addr_type(iso_pi(sk)->dst_type),
944                                  iso_pi(sk)->bc_sid, &iso_pi(sk)->qos);
945
946         hci_dev_put(hdev);
947
948         return err;
949 }
950
951 static int iso_listen_cis(struct sock *sk)
952 {
953         int err = 0;
954
955         BT_DBG("%pMR", &iso_pi(sk)->src);
956
957         write_lock(&iso_sk_list.lock);
958
959         if (__iso_get_sock_listen_by_addr(&iso_pi(sk)->src, &iso_pi(sk)->dst))
960                 err = -EADDRINUSE;
961
962         write_unlock(&iso_sk_list.lock);
963
964         return err;
965 }
966
967 static int iso_sock_listen(struct socket *sock, int backlog)
968 {
969         struct sock *sk = sock->sk;
970         int err = 0;
971
972         BT_DBG("sk %p backlog %d", sk, backlog);
973
974         lock_sock(sk);
975
976         if (sk->sk_state != BT_BOUND) {
977                 err = -EBADFD;
978                 goto done;
979         }
980
981         if (sk->sk_type != SOCK_SEQPACKET) {
982                 err = -EINVAL;
983                 goto done;
984         }
985
986         if (!bacmp(&iso_pi(sk)->dst, BDADDR_ANY))
987                 err = iso_listen_cis(sk);
988         else
989                 err = iso_listen_bis(sk);
990
991         if (err)
992                 goto done;
993
994         sk->sk_max_ack_backlog = backlog;
995         sk->sk_ack_backlog = 0;
996
997         sk->sk_state = BT_LISTEN;
998
999 done:
1000         release_sock(sk);
1001         return err;
1002 }
1003
1004 static int iso_sock_accept(struct socket *sock, struct socket *newsock,
1005                            int flags, bool kern)
1006 {
1007         DEFINE_WAIT_FUNC(wait, woken_wake_function);
1008         struct sock *sk = sock->sk, *ch;
1009         long timeo;
1010         int err = 0;
1011
1012         lock_sock(sk);
1013
1014         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
1015
1016         BT_DBG("sk %p timeo %ld", sk, timeo);
1017
1018         /* Wait for an incoming connection. (wake-one). */
1019         add_wait_queue_exclusive(sk_sleep(sk), &wait);
1020         while (1) {
1021                 if (sk->sk_state != BT_LISTEN) {
1022                         err = -EBADFD;
1023                         break;
1024                 }
1025
1026                 ch = bt_accept_dequeue(sk, newsock);
1027                 if (ch)
1028                         break;
1029
1030                 if (!timeo) {
1031                         err = -EAGAIN;
1032                         break;
1033                 }
1034
1035                 if (signal_pending(current)) {
1036                         err = sock_intr_errno(timeo);
1037                         break;
1038                 }
1039
1040                 release_sock(sk);
1041
1042                 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
1043                 lock_sock(sk);
1044         }
1045         remove_wait_queue(sk_sleep(sk), &wait);
1046
1047         if (err)
1048                 goto done;
1049
1050         newsock->state = SS_CONNECTED;
1051
1052         BT_DBG("new socket %p", ch);
1053
1054 done:
1055         release_sock(sk);
1056         return err;
1057 }
1058
1059 static int iso_sock_getname(struct socket *sock, struct sockaddr *addr,
1060                             int peer)
1061 {
1062         struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;
1063         struct sock *sk = sock->sk;
1064
1065         BT_DBG("sock %p, sk %p", sock, sk);
1066
1067         addr->sa_family = AF_BLUETOOTH;
1068
1069         if (peer) {
1070                 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->dst);
1071                 sa->iso_bdaddr_type = iso_pi(sk)->dst_type;
1072         } else {
1073                 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->src);
1074                 sa->iso_bdaddr_type = iso_pi(sk)->src_type;
1075         }
1076
1077         return sizeof(struct sockaddr_iso);
1078 }
1079
1080 static int iso_sock_sendmsg(struct socket *sock, struct msghdr *msg,
1081                             size_t len)
1082 {
1083         struct sock *sk = sock->sk;
1084         struct sk_buff *skb, **frag;
1085         size_t mtu;
1086         int err;
1087
1088         BT_DBG("sock %p, sk %p", sock, sk);
1089
1090         err = sock_error(sk);
1091         if (err)
1092                 return err;
1093
1094         if (msg->msg_flags & MSG_OOB)
1095                 return -EOPNOTSUPP;
1096
1097         lock_sock(sk);
1098
1099         if (sk->sk_state != BT_CONNECTED) {
1100                 release_sock(sk);
1101                 return -ENOTCONN;
1102         }
1103
1104         mtu = iso_pi(sk)->conn->hcon->hdev->iso_mtu;
1105
1106         release_sock(sk);
1107
1108         skb = bt_skb_sendmsg(sk, msg, len, mtu, HCI_ISO_DATA_HDR_SIZE, 0);
1109         if (IS_ERR(skb))
1110                 return PTR_ERR(skb);
1111
1112         len -= skb->len;
1113
1114         BT_DBG("skb %p len %d", sk, skb->len);
1115
1116         /* Continuation fragments */
1117         frag = &skb_shinfo(skb)->frag_list;
1118         while (len) {
1119                 struct sk_buff *tmp;
1120
1121                 tmp = bt_skb_sendmsg(sk, msg, len, mtu, 0, 0);
1122                 if (IS_ERR(tmp)) {
1123                         kfree_skb(skb);
1124                         return PTR_ERR(tmp);
1125                 }
1126
1127                 *frag = tmp;
1128
1129                 len  -= tmp->len;
1130
1131                 skb->len += tmp->len;
1132                 skb->data_len += tmp->len;
1133
1134                 BT_DBG("frag %p len %d", *frag, tmp->len);
1135
1136                 frag = &(*frag)->next;
1137         }
1138
1139         lock_sock(sk);
1140
1141         if (sk->sk_state == BT_CONNECTED)
1142                 err = iso_send_frame(sk, skb);
1143         else
1144                 err = -ENOTCONN;
1145
1146         release_sock(sk);
1147
1148         if (err < 0)
1149                 kfree_skb(skb);
1150         return err;
1151 }
1152
1153 static void iso_conn_defer_accept(struct hci_conn *conn)
1154 {
1155         struct hci_cp_le_accept_cis cp;
1156         struct hci_dev *hdev = conn->hdev;
1157
1158         BT_DBG("conn %p", conn);
1159
1160         conn->state = BT_CONFIG;
1161
1162         cp.handle = cpu_to_le16(conn->handle);
1163
1164         hci_send_cmd(hdev, HCI_OP_LE_ACCEPT_CIS, sizeof(cp), &cp);
1165 }
1166
1167 static void iso_conn_big_sync(struct sock *sk)
1168 {
1169         int err;
1170         struct hci_dev *hdev;
1171
1172         hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src,
1173                              iso_pi(sk)->src_type);
1174
1175         if (!hdev)
1176                 return;
1177
1178         if (!test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags)) {
1179                 err = hci_le_big_create_sync(hdev, iso_pi(sk)->conn->hcon,
1180                                              &iso_pi(sk)->qos,
1181                                              iso_pi(sk)->sync_handle,
1182                                              iso_pi(sk)->bc_num_bis,
1183                                              iso_pi(sk)->bc_bis);
1184                 if (err)
1185                         bt_dev_err(hdev, "hci_le_big_create_sync: %d",
1186                                    err);
1187         }
1188 }
1189
1190 static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1191                             size_t len, int flags)
1192 {
1193         struct sock *sk = sock->sk;
1194         struct iso_pinfo *pi = iso_pi(sk);
1195
1196         BT_DBG("sk %p", sk);
1197
1198         if (test_and_clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
1199                 lock_sock(sk);
1200                 switch (sk->sk_state) {
1201                 case BT_CONNECT2:
1202                         if (pi->conn->hcon &&
1203                             test_bit(HCI_CONN_PA_SYNC, &pi->conn->hcon->flags)) {
1204                                 iso_conn_big_sync(sk);
1205                                 sk->sk_state = BT_LISTEN;
1206                         } else {
1207                                 iso_conn_defer_accept(pi->conn->hcon);
1208                                 sk->sk_state = BT_CONFIG;
1209                         }
1210                         release_sock(sk);
1211                         return 0;
1212                 case BT_CONNECT:
1213                         release_sock(sk);
1214                         return iso_connect_cis(sk);
1215                 default:
1216                         release_sock(sk);
1217                         break;
1218                 }
1219         }
1220
1221         return bt_sock_recvmsg(sock, msg, len, flags);
1222 }
1223
1224 static bool check_io_qos(struct bt_iso_io_qos *qos)
1225 {
1226         /* If no PHY is enable SDU must be 0 */
1227         if (!qos->phy && qos->sdu)
1228                 return false;
1229
1230         if (qos->interval && (qos->interval < 0xff || qos->interval > 0xfffff))
1231                 return false;
1232
1233         if (qos->latency && (qos->latency < 0x05 || qos->latency > 0xfa0))
1234                 return false;
1235
1236         if (qos->phy > BT_ISO_PHY_ANY)
1237                 return false;
1238
1239         return true;
1240 }
1241
1242 static bool check_ucast_qos(struct bt_iso_qos *qos)
1243 {
1244         if (qos->ucast.cig > 0xef && qos->ucast.cig != BT_ISO_QOS_CIG_UNSET)
1245                 return false;
1246
1247         if (qos->ucast.cis > 0xef && qos->ucast.cis != BT_ISO_QOS_CIS_UNSET)
1248                 return false;
1249
1250         if (qos->ucast.sca > 0x07)
1251                 return false;
1252
1253         if (qos->ucast.packing > 0x01)
1254                 return false;
1255
1256         if (qos->ucast.framing > 0x01)
1257                 return false;
1258
1259         if (!check_io_qos(&qos->ucast.in))
1260                 return false;
1261
1262         if (!check_io_qos(&qos->ucast.out))
1263                 return false;
1264
1265         return true;
1266 }
1267
1268 static bool check_bcast_qos(struct bt_iso_qos *qos)
1269 {
1270         if (qos->bcast.sync_factor == 0x00)
1271                 return false;
1272
1273         if (qos->bcast.packing > 0x01)
1274                 return false;
1275
1276         if (qos->bcast.framing > 0x01)
1277                 return false;
1278
1279         if (!check_io_qos(&qos->bcast.in))
1280                 return false;
1281
1282         if (!check_io_qos(&qos->bcast.out))
1283                 return false;
1284
1285         if (qos->bcast.encryption > 0x01)
1286                 return false;
1287
1288         if (qos->bcast.options > 0x07)
1289                 return false;
1290
1291         if (qos->bcast.skip > 0x01f3)
1292                 return false;
1293
1294         if (qos->bcast.sync_timeout < 0x000a || qos->bcast.sync_timeout > 0x4000)
1295                 return false;
1296
1297         if (qos->bcast.sync_cte_type > 0x1f)
1298                 return false;
1299
1300         if (qos->bcast.mse > 0x1f)
1301                 return false;
1302
1303         if (qos->bcast.timeout < 0x000a || qos->bcast.timeout > 0x4000)
1304                 return false;
1305
1306         return true;
1307 }
1308
1309 static int iso_sock_setsockopt(struct socket *sock, int level, int optname,
1310                                sockptr_t optval, unsigned int optlen)
1311 {
1312         struct sock *sk = sock->sk;
1313         int len, err = 0;
1314         struct bt_iso_qos qos = default_qos;
1315         u32 opt;
1316
1317         BT_DBG("sk %p", sk);
1318
1319         lock_sock(sk);
1320
1321         switch (optname) {
1322         case BT_DEFER_SETUP:
1323                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1324                         err = -EINVAL;
1325                         break;
1326                 }
1327
1328                 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
1329                         err = -EFAULT;
1330                         break;
1331                 }
1332
1333                 if (opt)
1334                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
1335                 else
1336                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
1337                 break;
1338
1339         case BT_PKT_STATUS:
1340                 if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
1341                         err = -EFAULT;
1342                         break;
1343                 }
1344
1345                 if (opt)
1346                         set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1347                 else
1348                         clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1349                 break;
1350
1351         case BT_ISO_QOS:
1352                 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
1353                     sk->sk_state != BT_CONNECT2) {
1354                         err = -EINVAL;
1355                         break;
1356                 }
1357
1358                 len = min_t(unsigned int, sizeof(qos), optlen);
1359
1360                 if (copy_from_sockptr(&qos, optval, len)) {
1361                         err = -EFAULT;
1362                         break;
1363                 }
1364
1365                 if (len == sizeof(qos.ucast) && !check_ucast_qos(&qos)) {
1366                         err = -EINVAL;
1367                         break;
1368                 }
1369
1370                 iso_pi(sk)->qos = qos;
1371                 iso_pi(sk)->qos_user_set = true;
1372
1373                 break;
1374
1375         case BT_ISO_BASE:
1376                 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
1377                     sk->sk_state != BT_CONNECT2) {
1378                         err = -EINVAL;
1379                         break;
1380                 }
1381
1382                 if (optlen > sizeof(iso_pi(sk)->base)) {
1383                         err = -EOVERFLOW;
1384                         break;
1385                 }
1386
1387                 len = min_t(unsigned int, sizeof(iso_pi(sk)->base), optlen);
1388
1389                 if (copy_from_sockptr(iso_pi(sk)->base, optval, len)) {
1390                         err = -EFAULT;
1391                         break;
1392                 }
1393
1394                 iso_pi(sk)->base_len = len;
1395
1396                 break;
1397
1398         default:
1399                 err = -ENOPROTOOPT;
1400                 break;
1401         }
1402
1403         release_sock(sk);
1404         return err;
1405 }
1406
1407 static int iso_sock_getsockopt(struct socket *sock, int level, int optname,
1408                                char __user *optval, int __user *optlen)
1409 {
1410         struct sock *sk = sock->sk;
1411         int len, err = 0;
1412         struct bt_iso_qos *qos;
1413         u8 base_len;
1414         u8 *base;
1415
1416         BT_DBG("sk %p", sk);
1417
1418         if (get_user(len, optlen))
1419                 return -EFAULT;
1420
1421         lock_sock(sk);
1422
1423         switch (optname) {
1424         case BT_DEFER_SETUP:
1425                 if (sk->sk_state == BT_CONNECTED) {
1426                         err = -EINVAL;
1427                         break;
1428                 }
1429
1430                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1431                              (u32 __user *)optval))
1432                         err = -EFAULT;
1433
1434                 break;
1435
1436         case BT_PKT_STATUS:
1437                 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1438                              (int __user *)optval))
1439                         err = -EFAULT;
1440                 break;
1441
1442         case BT_ISO_QOS:
1443                 qos = iso_sock_get_qos(sk);
1444
1445                 len = min_t(unsigned int, len, sizeof(*qos));
1446                 if (copy_to_user(optval, qos, len))
1447                         err = -EFAULT;
1448
1449                 break;
1450
1451         case BT_ISO_BASE:
1452                 if (sk->sk_state == BT_CONNECTED &&
1453                     !bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) {
1454                         base_len = iso_pi(sk)->conn->hcon->le_per_adv_data_len;
1455                         base = iso_pi(sk)->conn->hcon->le_per_adv_data;
1456                 } else {
1457                         base_len = iso_pi(sk)->base_len;
1458                         base = iso_pi(sk)->base;
1459                 }
1460
1461                 len = min_t(unsigned int, len, base_len);
1462                 if (copy_to_user(optval, base, len))
1463                         err = -EFAULT;
1464
1465                 break;
1466
1467         default:
1468                 err = -ENOPROTOOPT;
1469                 break;
1470         }
1471
1472         release_sock(sk);
1473         return err;
1474 }
1475
1476 static int iso_sock_shutdown(struct socket *sock, int how)
1477 {
1478         struct sock *sk = sock->sk;
1479         int err = 0;
1480
1481         BT_DBG("sock %p, sk %p, how %d", sock, sk, how);
1482
1483         if (!sk)
1484                 return 0;
1485
1486         sock_hold(sk);
1487         lock_sock(sk);
1488
1489         switch (how) {
1490         case SHUT_RD:
1491                 if (sk->sk_shutdown & RCV_SHUTDOWN)
1492                         goto unlock;
1493                 sk->sk_shutdown |= RCV_SHUTDOWN;
1494                 break;
1495         case SHUT_WR:
1496                 if (sk->sk_shutdown & SEND_SHUTDOWN)
1497                         goto unlock;
1498                 sk->sk_shutdown |= SEND_SHUTDOWN;
1499                 break;
1500         case SHUT_RDWR:
1501                 if (sk->sk_shutdown & SHUTDOWN_MASK)
1502                         goto unlock;
1503                 sk->sk_shutdown |= SHUTDOWN_MASK;
1504                 break;
1505         }
1506
1507         iso_sock_clear_timer(sk);
1508         __iso_sock_close(sk);
1509
1510         if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1511             !(current->flags & PF_EXITING))
1512                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1513
1514 unlock:
1515         release_sock(sk);
1516         sock_put(sk);
1517
1518         return err;
1519 }
1520
1521 static int iso_sock_release(struct socket *sock)
1522 {
1523         struct sock *sk = sock->sk;
1524         int err = 0;
1525
1526         BT_DBG("sock %p, sk %p", sock, sk);
1527
1528         if (!sk)
1529                 return 0;
1530
1531         iso_sock_close(sk);
1532
1533         if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
1534             !(current->flags & PF_EXITING)) {
1535                 lock_sock(sk);
1536                 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1537                 release_sock(sk);
1538         }
1539
1540         sock_orphan(sk);
1541         iso_sock_kill(sk);
1542         return err;
1543 }
1544
1545 static void iso_sock_ready(struct sock *sk)
1546 {
1547         BT_DBG("sk %p", sk);
1548
1549         if (!sk)
1550                 return;
1551
1552         lock_sock(sk);
1553         iso_sock_clear_timer(sk);
1554         sk->sk_state = BT_CONNECTED;
1555         sk->sk_state_change(sk);
1556         release_sock(sk);
1557 }
1558
1559 struct iso_list_data {
1560         struct hci_conn *hcon;
1561         int count;
1562 };
1563
1564 static bool iso_match_big(struct sock *sk, void *data)
1565 {
1566         struct hci_evt_le_big_sync_estabilished *ev = data;
1567
1568         return ev->handle == iso_pi(sk)->qos.bcast.big;
1569 }
1570
1571 static bool iso_match_pa_sync_flag(struct sock *sk, void *data)
1572 {
1573         return test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags);
1574 }
1575
1576 static void iso_conn_ready(struct iso_conn *conn)
1577 {
1578         struct sock *parent = NULL;
1579         struct sock *sk = conn->sk;
1580         struct hci_ev_le_big_sync_estabilished *ev = NULL;
1581         struct hci_ev_le_pa_sync_established *ev2 = NULL;
1582         struct hci_evt_le_big_info_adv_report *ev3 = NULL;
1583         struct hci_conn *hcon;
1584
1585         BT_DBG("conn %p", conn);
1586
1587         if (sk) {
1588                 iso_sock_ready(conn->sk);
1589         } else {
1590                 hcon = conn->hcon;
1591                 if (!hcon)
1592                         return;
1593
1594                 if (test_bit(HCI_CONN_BIG_SYNC, &hcon->flags) ||
1595                     test_bit(HCI_CONN_BIG_SYNC_FAILED, &hcon->flags)) {
1596                         ev = hci_recv_event_data(hcon->hdev,
1597                                                  HCI_EVT_LE_BIG_SYNC_ESTABILISHED);
1598
1599                         /* Get reference to PA sync parent socket, if it exists */
1600                         parent = iso_get_sock_listen(&hcon->src,
1601                                                      &hcon->dst,
1602                                                      iso_match_pa_sync_flag, NULL);
1603                         if (!parent && ev)
1604                                 parent = iso_get_sock_listen(&hcon->src,
1605                                                              &hcon->dst,
1606                                                              iso_match_big, ev);
1607                 } else if (test_bit(HCI_CONN_PA_SYNC_FAILED, &hcon->flags)) {
1608                         ev2 = hci_recv_event_data(hcon->hdev,
1609                                                   HCI_EV_LE_PA_SYNC_ESTABLISHED);
1610                         if (ev2)
1611                                 parent = iso_get_sock_listen(&hcon->src,
1612                                                              &hcon->dst,
1613                                                              iso_match_sid, ev2);
1614                 } else if (test_bit(HCI_CONN_PA_SYNC, &hcon->flags)) {
1615                         ev3 = hci_recv_event_data(hcon->hdev,
1616                                                   HCI_EVT_LE_BIG_INFO_ADV_REPORT);
1617                         if (ev3)
1618                                 parent = iso_get_sock_listen(&hcon->src,
1619                                                              &hcon->dst,
1620                                                              iso_match_sync_handle, ev3);
1621                 }
1622
1623                 if (!parent)
1624                         parent = iso_get_sock_listen(&hcon->src,
1625                                                         BDADDR_ANY, NULL, NULL);
1626
1627                 if (!parent)
1628                         return;
1629
1630                 lock_sock(parent);
1631
1632                 sk = iso_sock_alloc(sock_net(parent), NULL,
1633                                     BTPROTO_ISO, GFP_ATOMIC, 0);
1634                 if (!sk) {
1635                         release_sock(parent);
1636                         return;
1637                 }
1638
1639                 iso_sock_init(sk, parent);
1640
1641                 bacpy(&iso_pi(sk)->src, &hcon->src);
1642
1643                 /* Convert from HCI to three-value type */
1644                 if (hcon->src_type == ADDR_LE_DEV_PUBLIC)
1645                         iso_pi(sk)->src_type = BDADDR_LE_PUBLIC;
1646                 else
1647                         iso_pi(sk)->src_type = BDADDR_LE_RANDOM;
1648
1649                 /* If hcon has no destination address (BDADDR_ANY) it means it
1650                  * was created by HCI_EV_LE_BIG_SYNC_ESTABILISHED or
1651                  * HCI_EV_LE_PA_SYNC_ESTABLISHED so we need to initialize using
1652                  * the parent socket destination address.
1653                  */
1654                 if (!bacmp(&hcon->dst, BDADDR_ANY)) {
1655                         bacpy(&hcon->dst, &iso_pi(parent)->dst);
1656                         hcon->dst_type = iso_pi(parent)->dst_type;
1657                         hcon->sync_handle = iso_pi(parent)->sync_handle;
1658                 }
1659
1660                 if (ev3) {
1661                         iso_pi(sk)->qos = iso_pi(parent)->qos;
1662                         iso_pi(sk)->qos.bcast.encryption = ev3->encryption;
1663                         hcon->iso_qos = iso_pi(sk)->qos;
1664                         iso_pi(sk)->bc_num_bis = iso_pi(parent)->bc_num_bis;
1665                         memcpy(iso_pi(sk)->bc_bis, iso_pi(parent)->bc_bis, ISO_MAX_NUM_BIS);
1666                         set_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags);
1667                 }
1668
1669                 bacpy(&iso_pi(sk)->dst, &hcon->dst);
1670                 iso_pi(sk)->dst_type = hcon->dst_type;
1671                 iso_pi(sk)->sync_handle = iso_pi(parent)->sync_handle;
1672                 memcpy(iso_pi(sk)->base, iso_pi(parent)->base, iso_pi(parent)->base_len);
1673                 iso_pi(sk)->base_len = iso_pi(parent)->base_len;
1674
1675                 hci_conn_hold(hcon);
1676                 iso_chan_add(conn, sk, parent);
1677
1678                 if ((ev && ((struct hci_evt_le_big_sync_estabilished *)ev)->status) ||
1679                     (ev2 && ev2->status)) {
1680                         /* Trigger error signal on child socket */
1681                         sk->sk_err = ECONNREFUSED;
1682                         sk->sk_error_report(sk);
1683                 }
1684
1685                 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1686                         sk->sk_state = BT_CONNECT2;
1687                 else
1688                         sk->sk_state = BT_CONNECTED;
1689
1690                 /* Wake up parent */
1691                 parent->sk_data_ready(parent);
1692
1693                 release_sock(parent);
1694         }
1695 }
1696
1697 static bool iso_match_sid(struct sock *sk, void *data)
1698 {
1699         struct hci_ev_le_pa_sync_established *ev = data;
1700
1701         return ev->sid == iso_pi(sk)->bc_sid;
1702 }
1703
1704 static bool iso_match_sync_handle(struct sock *sk, void *data)
1705 {
1706         struct hci_evt_le_big_info_adv_report *ev = data;
1707
1708         return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle;
1709 }
1710
1711 static bool iso_match_sync_handle_pa_report(struct sock *sk, void *data)
1712 {
1713         struct hci_ev_le_per_adv_report *ev = data;
1714
1715         return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle;
1716 }
1717
1718 /* ----- ISO interface with lower layer (HCI) ----- */
1719
1720 int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
1721 {
1722         struct hci_ev_le_pa_sync_established *ev1;
1723         struct hci_evt_le_big_info_adv_report *ev2;
1724         struct hci_ev_le_per_adv_report *ev3;
1725         struct sock *sk;
1726         int lm = 0;
1727
1728         bt_dev_dbg(hdev, "bdaddr %pMR", bdaddr);
1729
1730         /* Broadcast receiver requires handling of some events before it can
1731          * proceed to establishing a BIG sync:
1732          *
1733          * 1. HCI_EV_LE_PA_SYNC_ESTABLISHED: The socket may specify a specific
1734          * SID to listen to and once sync is estabilished its handle needs to
1735          * be stored in iso_pi(sk)->sync_handle so it can be matched once
1736          * receiving the BIG Info.
1737          * 2. HCI_EVT_LE_BIG_INFO_ADV_REPORT: When connect_ind is triggered by a
1738          * a BIG Info it attempts to check if there any listening socket with
1739          * the same sync_handle and if it does then attempt to create a sync.
1740          * 3. HCI_EV_LE_PER_ADV_REPORT: When a PA report is received, it is stored
1741          * in iso_pi(sk)->base so it can be passed up to user, in the case of a
1742          * broadcast sink.
1743          */
1744         ev1 = hci_recv_event_data(hdev, HCI_EV_LE_PA_SYNC_ESTABLISHED);
1745         if (ev1) {
1746                 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, iso_match_sid,
1747                                          ev1);
1748                 if (sk && !ev1->status)
1749                         iso_pi(sk)->sync_handle = le16_to_cpu(ev1->handle);
1750
1751                 goto done;
1752         }
1753
1754         ev2 = hci_recv_event_data(hdev, HCI_EVT_LE_BIG_INFO_ADV_REPORT);
1755         if (ev2) {
1756                 /* Try to get PA sync listening socket, if it exists */
1757                 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1758                                                 iso_match_pa_sync_flag, NULL);
1759                 if (!sk)
1760                         sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1761                                                  iso_match_sync_handle, ev2);
1762                 if (sk) {
1763                         int err;
1764
1765                         if (ev2->num_bis < iso_pi(sk)->bc_num_bis)
1766                                 iso_pi(sk)->bc_num_bis = ev2->num_bis;
1767
1768                         if (!test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags) &&
1769                             !test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags)) {
1770                                 err = hci_le_big_create_sync(hdev, NULL,
1771                                                              &iso_pi(sk)->qos,
1772                                                              iso_pi(sk)->sync_handle,
1773                                                              iso_pi(sk)->bc_num_bis,
1774                                                              iso_pi(sk)->bc_bis);
1775                                 if (err) {
1776                                         bt_dev_err(hdev, "hci_le_big_create_sync: %d",
1777                                                    err);
1778                                         sk = NULL;
1779                                 }
1780                         }
1781                 }
1782         }
1783
1784         ev3 = hci_recv_event_data(hdev, HCI_EV_LE_PER_ADV_REPORT);
1785         if (ev3) {
1786                 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr,
1787                                          iso_match_sync_handle_pa_report, ev3);
1788
1789                 if (sk) {
1790                         memcpy(iso_pi(sk)->base, ev3->data, ev3->length);
1791                         iso_pi(sk)->base_len = ev3->length;
1792                 }
1793         } else {
1794                 sk = iso_get_sock_listen(&hdev->bdaddr, BDADDR_ANY, NULL, NULL);
1795         }
1796
1797 done:
1798         if (!sk)
1799                 return lm;
1800
1801         lm |= HCI_LM_ACCEPT;
1802
1803         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1804                 *flags |= HCI_PROTO_DEFER;
1805
1806         return lm;
1807 }
1808
1809 static void iso_connect_cfm(struct hci_conn *hcon, __u8 status)
1810 {
1811         if (hcon->type != ISO_LINK) {
1812                 if (hcon->type != LE_LINK)
1813                         return;
1814
1815                 /* Check if LE link has failed */
1816                 if (status) {
1817                         struct hci_link *link, *t;
1818
1819                         list_for_each_entry_safe(link, t, &hcon->link_list,
1820                                                  list)
1821                                 iso_conn_del(link->conn, bt_to_errno(status));
1822
1823                         return;
1824                 }
1825
1826                 /* Create CIS if pending */
1827                 hci_le_create_cis_pending(hcon->hdev);
1828                 return;
1829         }
1830
1831         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
1832
1833         /* Similar to the success case, if HCI_CONN_BIG_SYNC_FAILED or
1834          * HCI_CONN_PA_SYNC_FAILED is set, queue the failed connection
1835          * into the accept queue of the listening socket and wake up
1836          * userspace, to inform the user about the event.
1837          */
1838         if (!status || test_bit(HCI_CONN_BIG_SYNC_FAILED, &hcon->flags) ||
1839             test_bit(HCI_CONN_PA_SYNC_FAILED, &hcon->flags)) {
1840                 struct iso_conn *conn;
1841
1842                 conn = iso_conn_add(hcon);
1843                 if (conn)
1844                         iso_conn_ready(conn);
1845         } else {
1846                 iso_conn_del(hcon, bt_to_errno(status));
1847         }
1848 }
1849
1850 static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason)
1851 {
1852         if (hcon->type != ISO_LINK)
1853                 return;
1854
1855         BT_DBG("hcon %p reason %d", hcon, reason);
1856
1857         iso_conn_del(hcon, bt_to_errno(reason));
1858 }
1859
1860 void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
1861 {
1862         struct iso_conn *conn = hcon->iso_data;
1863         __u16 pb, ts, len;
1864
1865         if (!conn)
1866                 goto drop;
1867
1868         pb     = hci_iso_flags_pb(flags);
1869         ts     = hci_iso_flags_ts(flags);
1870
1871         BT_DBG("conn %p len %d pb 0x%x ts 0x%x", conn, skb->len, pb, ts);
1872
1873         switch (pb) {
1874         case ISO_START:
1875         case ISO_SINGLE:
1876                 if (conn->rx_len) {
1877                         BT_ERR("Unexpected start frame (len %d)", skb->len);
1878                         kfree_skb(conn->rx_skb);
1879                         conn->rx_skb = NULL;
1880                         conn->rx_len = 0;
1881                 }
1882
1883                 if (ts) {
1884                         struct hci_iso_ts_data_hdr *hdr;
1885
1886                         /* TODO: add timestamp to the packet? */
1887                         hdr = skb_pull_data(skb, HCI_ISO_TS_DATA_HDR_SIZE);
1888                         if (!hdr) {
1889                                 BT_ERR("Frame is too short (len %d)", skb->len);
1890                                 goto drop;
1891                         }
1892
1893                         len = __le16_to_cpu(hdr->slen);
1894                 } else {
1895                         struct hci_iso_data_hdr *hdr;
1896
1897                         hdr = skb_pull_data(skb, HCI_ISO_DATA_HDR_SIZE);
1898                         if (!hdr) {
1899                                 BT_ERR("Frame is too short (len %d)", skb->len);
1900                                 goto drop;
1901                         }
1902
1903                         len = __le16_to_cpu(hdr->slen);
1904                 }
1905
1906                 flags  = hci_iso_data_flags(len);
1907                 len    = hci_iso_data_len(len);
1908
1909                 BT_DBG("Start: total len %d, frag len %d flags 0x%4.4x", len,
1910                        skb->len, flags);
1911
1912                 if (len == skb->len) {
1913                         /* Complete frame received */
1914                         hci_skb_pkt_status(skb) = flags & 0x03;
1915                         iso_recv_frame(conn, skb);
1916                         return;
1917                 }
1918
1919                 if (pb == ISO_SINGLE) {
1920                         BT_ERR("Frame malformed (len %d, expected len %d)",
1921                                skb->len, len);
1922                         goto drop;
1923                 }
1924
1925                 if (skb->len > len) {
1926                         BT_ERR("Frame is too long (len %d, expected len %d)",
1927                                skb->len, len);
1928                         goto drop;
1929                 }
1930
1931                 /* Allocate skb for the complete frame (with header) */
1932                 conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
1933                 if (!conn->rx_skb)
1934                         goto drop;
1935
1936                 hci_skb_pkt_status(conn->rx_skb) = flags & 0x03;
1937                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
1938                                           skb->len);
1939                 conn->rx_len = len - skb->len;
1940                 break;
1941
1942         case ISO_CONT:
1943                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len,
1944                        conn->rx_len);
1945
1946                 if (!conn->rx_len) {
1947                         BT_ERR("Unexpected continuation frame (len %d)",
1948                                skb->len);
1949                         goto drop;
1950                 }
1951
1952                 if (skb->len > conn->rx_len) {
1953                         BT_ERR("Fragment is too long (len %d, expected %d)",
1954                                skb->len, conn->rx_len);
1955                         kfree_skb(conn->rx_skb);
1956                         conn->rx_skb = NULL;
1957                         conn->rx_len = 0;
1958                         goto drop;
1959                 }
1960
1961                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
1962                                           skb->len);
1963                 conn->rx_len -= skb->len;
1964                 return;
1965
1966         case ISO_END:
1967                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
1968                                           skb->len);
1969                 conn->rx_len -= skb->len;
1970
1971                 if (!conn->rx_len) {
1972                         struct sk_buff *rx_skb = conn->rx_skb;
1973
1974                         /* Complete frame received. iso_recv_frame
1975                          * takes ownership of the skb so set the global
1976                          * rx_skb pointer to NULL first.
1977                          */
1978                         conn->rx_skb = NULL;
1979                         iso_recv_frame(conn, rx_skb);
1980                 }
1981                 break;
1982         }
1983
1984 drop:
1985         kfree_skb(skb);
1986 }
1987
1988 static struct hci_cb iso_cb = {
1989         .name           = "ISO",
1990         .connect_cfm    = iso_connect_cfm,
1991         .disconn_cfm    = iso_disconn_cfm,
1992 };
1993
1994 static int iso_debugfs_show(struct seq_file *f, void *p)
1995 {
1996         struct sock *sk;
1997
1998         read_lock(&iso_sk_list.lock);
1999
2000         sk_for_each(sk, &iso_sk_list.head) {
2001                 seq_printf(f, "%pMR %pMR %d\n", &iso_pi(sk)->src,
2002                            &iso_pi(sk)->dst, sk->sk_state);
2003         }
2004
2005         read_unlock(&iso_sk_list.lock);
2006
2007         return 0;
2008 }
2009
2010 DEFINE_SHOW_ATTRIBUTE(iso_debugfs);
2011
2012 static struct dentry *iso_debugfs;
2013
2014 static const struct proto_ops iso_sock_ops = {
2015         .family         = PF_BLUETOOTH,
2016         .owner          = THIS_MODULE,
2017         .release        = iso_sock_release,
2018         .bind           = iso_sock_bind,
2019         .connect        = iso_sock_connect,
2020         .listen         = iso_sock_listen,
2021         .accept         = iso_sock_accept,
2022         .getname        = iso_sock_getname,
2023         .sendmsg        = iso_sock_sendmsg,
2024         .recvmsg        = iso_sock_recvmsg,
2025         .poll           = bt_sock_poll,
2026         .ioctl          = bt_sock_ioctl,
2027         .mmap           = sock_no_mmap,
2028         .socketpair     = sock_no_socketpair,
2029         .shutdown       = iso_sock_shutdown,
2030         .setsockopt     = iso_sock_setsockopt,
2031         .getsockopt     = iso_sock_getsockopt
2032 };
2033
2034 static const struct net_proto_family iso_sock_family_ops = {
2035         .family = PF_BLUETOOTH,
2036         .owner  = THIS_MODULE,
2037         .create = iso_sock_create,
2038 };
2039
2040 static bool iso_inited;
2041
2042 bool iso_enabled(void)
2043 {
2044         return iso_inited;
2045 }
2046
2047 int iso_init(void)
2048 {
2049         int err;
2050
2051         BUILD_BUG_ON(sizeof(struct sockaddr_iso) > sizeof(struct sockaddr));
2052
2053         if (iso_inited)
2054                 return -EALREADY;
2055
2056         err = proto_register(&iso_proto, 0);
2057         if (err < 0)
2058                 return err;
2059
2060         err = bt_sock_register(BTPROTO_ISO, &iso_sock_family_ops);
2061         if (err < 0) {
2062                 BT_ERR("ISO socket registration failed");
2063                 goto error;
2064         }
2065
2066         err = bt_procfs_init(&init_net, "iso", &iso_sk_list, NULL);
2067         if (err < 0) {
2068                 BT_ERR("Failed to create ISO proc file");
2069                 bt_sock_unregister(BTPROTO_ISO);
2070                 goto error;
2071         }
2072
2073         BT_INFO("ISO socket layer initialized");
2074
2075         hci_register_cb(&iso_cb);
2076
2077         if (IS_ERR_OR_NULL(bt_debugfs))
2078                 return 0;
2079
2080         if (!iso_debugfs) {
2081                 iso_debugfs = debugfs_create_file("iso", 0444, bt_debugfs,
2082                                                   NULL, &iso_debugfs_fops);
2083         }
2084
2085         iso_inited = true;
2086
2087         return 0;
2088
2089 error:
2090         proto_unregister(&iso_proto);
2091         return err;
2092 }
2093
2094 int iso_exit(void)
2095 {
2096         if (!iso_inited)
2097                 return -EALREADY;
2098
2099         bt_procfs_cleanup(&init_net, "iso");
2100
2101         debugfs_remove(iso_debugfs);
2102         iso_debugfs = NULL;
2103
2104         hci_unregister_cb(&iso_cb);
2105
2106         bt_sock_unregister(BTPROTO_ISO);
2107
2108         proto_unregister(&iso_proto);
2109
2110         iso_inited = false;
2111
2112         return 0;
2113 }