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