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