xref: /linux/net/bluetooth/iso.c (revision fafb66e5903c2bcfc7b7e259042a8282f18a6faa)
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 	struct iso_conn *conn;
1594 	bdaddr_t src, dst;
1595 	u8 src_type;
1596 
1597 	lock_sock(sk);
1598 	bacpy(&src, &iso_pi(sk)->src);
1599 	bacpy(&dst, &iso_pi(sk)->dst);
1600 	src_type = iso_pi(sk)->src_type;
1601 	release_sock(sk);
1602 
1603 	hdev = hci_get_route(&dst, &src, src_type);
1604 
1605 	if (!hdev)
1606 		return;
1607 
1608 	/* hci_le_big_create_sync requires hdev lock to be held, since
1609 	 * it enqueues the HCI LE BIG Create Sync command via
1610 	 * hci_cmd_sync_queue_once, which checks hdev flags that might
1611 	 * change.
1612 	 */
1613 	hci_dev_lock(hdev);
1614 	lock_sock(sk);
1615 
1616 	/* The socket lock was dropped for hci_get_route(), so the connection
1617 	 * may have been torn down meanwhile: iso_chan_del() clears conn and
1618 	 * the broadcast teardown path can clear conn->hcon on its own. Check
1619 	 * both before dereferencing conn->hcon.
1620 	 */
1621 	conn = iso_pi(sk)->conn;
1622 	if (!conn || !conn->hcon)
1623 		goto unlock;
1624 
1625 	if (!test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags)) {
1626 		err = hci_conn_big_create_sync(hdev, conn->hcon,
1627 					       &iso_pi(sk)->qos,
1628 					       iso_pi(sk)->sync_handle,
1629 					       iso_pi(sk)->bc_num_bis,
1630 					       iso_pi(sk)->bc_bis);
1631 		if (err)
1632 			bt_dev_err(hdev, "hci_big_create_sync: %d", err);
1633 	}
1634 
1635 unlock:
1636 	release_sock(sk);
1637 	hci_dev_unlock(hdev);
1638 	hci_dev_put(hdev);
1639 }
1640 
1641 static int iso_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1642 			    size_t len, int flags)
1643 {
1644 	struct sock *sk = sock->sk;
1645 	struct iso_pinfo *pi = iso_pi(sk);
1646 	bool early_ret = false;
1647 	int err = 0;
1648 
1649 	BT_DBG("sk %p", sk);
1650 
1651 	if (unlikely(flags & MSG_ERRQUEUE))
1652 		return sock_recv_errqueue(sk, msg, len, SOL_BLUETOOTH,
1653 					  BT_SCM_ERROR);
1654 
1655 	if (test_and_clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
1656 		sock_hold(sk);
1657 		lock_sock(sk);
1658 
1659 		switch (sk->sk_state) {
1660 		case BT_CONNECT2:
1661 			if (test_bit(BT_SK_PA_SYNC, &pi->flags)) {
1662 				release_sock(sk);
1663 				iso_conn_big_sync(sk);
1664 				lock_sock(sk);
1665 
1666 				sk->sk_state = BT_LISTEN;
1667 			} else {
1668 				iso_conn_defer_accept(pi->conn->hcon);
1669 				sk->sk_state = BT_CONFIG;
1670 			}
1671 
1672 			early_ret = true;
1673 			break;
1674 		case BT_CONNECTED:
1675 			if (test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags)) {
1676 				release_sock(sk);
1677 				iso_conn_big_sync(sk);
1678 				lock_sock(sk);
1679 
1680 				sk->sk_state = BT_LISTEN;
1681 				early_ret = true;
1682 			}
1683 
1684 			break;
1685 		case BT_CONNECT:
1686 			release_sock(sk);
1687 			err = iso_connect_cis(sk);
1688 			lock_sock(sk);
1689 
1690 			early_ret = true;
1691 			break;
1692 		default:
1693 			break;
1694 		}
1695 
1696 		release_sock(sk);
1697 		sock_put(sk);
1698 
1699 		if (early_ret)
1700 			return err;
1701 	}
1702 
1703 	return bt_sock_recvmsg(sock, msg, len, flags);
1704 }
1705 
1706 static bool check_io_qos(struct bt_iso_io_qos *qos)
1707 {
1708 	/* If no PHY is enable SDU must be 0 */
1709 	if (!qos->phys && qos->sdu)
1710 		return false;
1711 
1712 	if (qos->interval && (qos->interval < 0xff || qos->interval > 0xfffff))
1713 		return false;
1714 
1715 	if (qos->latency && (qos->latency < 0x05 || qos->latency > 0xfa0))
1716 		return false;
1717 
1718 	if (qos->phys > BT_ISO_PHY_ANY)
1719 		return false;
1720 
1721 	return true;
1722 }
1723 
1724 static bool check_ucast_qos(struct bt_iso_qos *qos)
1725 {
1726 	if (qos->ucast.cig > 0xef && qos->ucast.cig != BT_ISO_QOS_CIG_UNSET)
1727 		return false;
1728 
1729 	if (qos->ucast.cis > 0xef && qos->ucast.cis != BT_ISO_QOS_CIS_UNSET)
1730 		return false;
1731 
1732 	if (qos->ucast.sca > 0x07)
1733 		return false;
1734 
1735 	if (qos->ucast.packing > 0x01)
1736 		return false;
1737 
1738 	if (qos->ucast.framing > 0x01)
1739 		return false;
1740 
1741 	if (!check_io_qos(&qos->ucast.in))
1742 		return false;
1743 
1744 	if (!check_io_qos(&qos->ucast.out))
1745 		return false;
1746 
1747 	return true;
1748 }
1749 
1750 static bool check_bcast_qos(struct bt_iso_qos *qos)
1751 {
1752 	if (!qos->bcast.sync_factor)
1753 		qos->bcast.sync_factor = 0x01;
1754 
1755 	if (qos->bcast.packing > 0x01)
1756 		return false;
1757 
1758 	if (qos->bcast.framing > 0x01)
1759 		return false;
1760 
1761 	if (!check_io_qos(&qos->bcast.in))
1762 		return false;
1763 
1764 	if (!check_io_qos(&qos->bcast.out))
1765 		return false;
1766 
1767 	if (qos->bcast.encryption > 0x01)
1768 		return false;
1769 
1770 	if (qos->bcast.options > 0x07)
1771 		return false;
1772 
1773 	if (qos->bcast.skip > 0x01f3)
1774 		return false;
1775 
1776 	if (!qos->bcast.sync_timeout)
1777 		qos->bcast.sync_timeout = BT_ISO_SYNC_TIMEOUT;
1778 
1779 	if (qos->bcast.sync_timeout < 0x000a || qos->bcast.sync_timeout > 0x4000)
1780 		return false;
1781 
1782 	if (qos->bcast.sync_cte_type > 0x1f)
1783 		return false;
1784 
1785 	if (qos->bcast.mse > 0x1f)
1786 		return false;
1787 
1788 	if (!qos->bcast.timeout)
1789 		qos->bcast.sync_timeout = BT_ISO_SYNC_TIMEOUT;
1790 
1791 	if (qos->bcast.timeout < 0x000a || qos->bcast.timeout > 0x4000)
1792 		return false;
1793 
1794 	return true;
1795 }
1796 
1797 static int iso_sock_setsockopt(struct socket *sock, int level, int optname,
1798 			       sockptr_t optval, unsigned int optlen)
1799 {
1800 	struct sock *sk = sock->sk;
1801 	int err = 0;
1802 	struct bt_iso_qos qos = default_qos;
1803 	u32 opt;
1804 
1805 	BT_DBG("sk %p", sk);
1806 
1807 	lock_sock(sk);
1808 
1809 	switch (optname) {
1810 	case BT_DEFER_SETUP:
1811 		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1812 			err = -EINVAL;
1813 			break;
1814 		}
1815 
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_DEFER_SETUP, &bt_sk(sk)->flags);
1822 		else
1823 			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
1824 		break;
1825 
1826 	case BT_PKT_STATUS:
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_STATUS, &bt_sk(sk)->flags);
1833 		else
1834 			clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1835 		break;
1836 
1837 	case BT_PKT_SEQNUM:
1838 		err = copy_safe_from_sockptr(&opt, sizeof(opt), optval, optlen);
1839 		if (err)
1840 			break;
1841 
1842 		if (opt)
1843 			set_bit(BT_SK_PKT_SEQNUM, &bt_sk(sk)->flags);
1844 		else
1845 			clear_bit(BT_SK_PKT_SEQNUM, &bt_sk(sk)->flags);
1846 		break;
1847 
1848 	case BT_ISO_QOS:
1849 		if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
1850 		    sk->sk_state != BT_CONNECT2 &&
1851 		    (!test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags) ||
1852 		    sk->sk_state != BT_CONNECTED)) {
1853 			err = -EINVAL;
1854 			break;
1855 		}
1856 
1857 		err = copy_safe_from_sockptr(&qos, sizeof(qos), optval, optlen);
1858 		if (err)
1859 			break;
1860 
1861 		iso_pi(sk)->qos = qos;
1862 		iso_pi(sk)->qos_user_set = true;
1863 
1864 		break;
1865 
1866 	case BT_ISO_BASE:
1867 		if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
1868 		    sk->sk_state != BT_CONNECT2) {
1869 			err = -EINVAL;
1870 			break;
1871 		}
1872 
1873 		if (optlen > sizeof(iso_pi(sk)->base)) {
1874 			err = -EINVAL;
1875 			break;
1876 		}
1877 
1878 		err = copy_safe_from_sockptr(iso_pi(sk)->base, optlen, optval,
1879 					     optlen);
1880 		if (err)
1881 			break;
1882 
1883 		iso_pi(sk)->base_len = optlen;
1884 
1885 		break;
1886 
1887 	default:
1888 		err = -ENOPROTOOPT;
1889 		break;
1890 	}
1891 
1892 	release_sock(sk);
1893 	return err;
1894 }
1895 
1896 static int iso_sock_getsockopt(struct socket *sock, int level, int optname,
1897 			       sockopt_t *opt)
1898 {
1899 	struct sock *sk = sock->sk;
1900 	struct bt_iso_qos *qos;
1901 	int len, val, err = 0;
1902 	u8 base_len;
1903 	u8 *base;
1904 
1905 	BT_DBG("sk %p", sk);
1906 
1907 	len = opt->optlen;
1908 
1909 	lock_sock(sk);
1910 
1911 	switch (optname) {
1912 	case BT_DEFER_SETUP:
1913 		if (sk->sk_state == BT_CONNECTED) {
1914 			err = -EINVAL;
1915 			break;
1916 		}
1917 
1918 		val = test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
1919 		if (copy_to_iter(&val, sizeof(val), &opt->iter_out) !=
1920 		    sizeof(val))
1921 			err = -EFAULT;
1922 
1923 		break;
1924 
1925 	case BT_PKT_STATUS:
1926 		val = test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1927 		if (copy_to_iter(&val, sizeof(val), &opt->iter_out) !=
1928 		    sizeof(val))
1929 			err = -EFAULT;
1930 		break;
1931 
1932 	case BT_ISO_QOS:
1933 		qos = iso_sock_get_qos(sk);
1934 
1935 		len = min_t(unsigned int, len, sizeof(*qos));
1936 		if (copy_to_iter(qos, len, &opt->iter_out) != len)
1937 			err = -EFAULT;
1938 
1939 		break;
1940 
1941 	case BT_ISO_BASE:
1942 		if (sk->sk_state == BT_CONNECTED &&
1943 		    !bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) {
1944 			base_len = iso_pi(sk)->conn->hcon->le_per_adv_data_len;
1945 			base = iso_pi(sk)->conn->hcon->le_per_adv_data;
1946 		} else {
1947 			base_len = iso_pi(sk)->base_len;
1948 			base = iso_pi(sk)->base;
1949 		}
1950 
1951 		len = min_t(unsigned int, len, base_len);
1952 		opt->optlen = len;
1953 		if (copy_to_iter(base, len, &opt->iter_out) != len)
1954 			err = -EFAULT;
1955 
1956 		break;
1957 
1958 	default:
1959 		err = -ENOPROTOOPT;
1960 		break;
1961 	}
1962 
1963 	release_sock(sk);
1964 	return err;
1965 }
1966 
1967 static int iso_sock_shutdown(struct socket *sock, int how)
1968 {
1969 	struct sock *sk = sock->sk;
1970 	int err = 0;
1971 
1972 	BT_DBG("sock %p, sk %p, how %d", sock, sk, how);
1973 
1974 	if (!sk)
1975 		return 0;
1976 
1977 	sock_hold(sk);
1978 	lock_sock(sk);
1979 
1980 	switch (how) {
1981 	case SHUT_RD:
1982 		if (sk->sk_shutdown & RCV_SHUTDOWN)
1983 			goto unlock;
1984 		sk->sk_shutdown |= RCV_SHUTDOWN;
1985 		break;
1986 	case SHUT_WR:
1987 		if (sk->sk_shutdown & SEND_SHUTDOWN)
1988 			goto unlock;
1989 		sk->sk_shutdown |= SEND_SHUTDOWN;
1990 		break;
1991 	case SHUT_RDWR:
1992 		if (sk->sk_shutdown & SHUTDOWN_MASK)
1993 			goto unlock;
1994 		sk->sk_shutdown |= SHUTDOWN_MASK;
1995 		break;
1996 	}
1997 
1998 	iso_sock_clear_timer(sk);
1999 	__iso_sock_close(sk);
2000 
2001 	if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
2002 	    !(current->flags & PF_EXITING))
2003 		err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
2004 
2005 unlock:
2006 	release_sock(sk);
2007 	sock_put(sk);
2008 
2009 	return err;
2010 }
2011 
2012 static int iso_sock_release(struct socket *sock)
2013 {
2014 	struct sock *sk = sock->sk;
2015 	int err = 0;
2016 
2017 	BT_DBG("sock %p, sk %p", sock, sk);
2018 
2019 	if (!sk)
2020 		return 0;
2021 
2022 	iso_sock_close(sk);
2023 
2024 	if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
2025 	    !(current->flags & PF_EXITING)) {
2026 		lock_sock(sk);
2027 		err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
2028 		release_sock(sk);
2029 	}
2030 
2031 	sock_orphan(sk);
2032 	iso_sock_kill(sk);
2033 	return err;
2034 }
2035 
2036 static void iso_sock_ready(struct sock *sk)
2037 {
2038 	BT_DBG("sk %p", sk);
2039 
2040 	if (!sk)
2041 		return;
2042 
2043 	lock_sock(sk);
2044 	iso_sock_clear_timer(sk);
2045 	sk->sk_state = BT_CONNECTED;
2046 	sk->sk_state_change(sk);
2047 	release_sock(sk);
2048 }
2049 
2050 static bool iso_match_big(struct sock *sk, void *data)
2051 {
2052 	struct hci_evt_le_big_sync_established *ev = data;
2053 
2054 	return ev->handle == iso_pi(sk)->qos.bcast.big;
2055 }
2056 
2057 static bool iso_match_big_hcon(struct sock *sk, void *data)
2058 {
2059 	struct hci_conn *hcon = data;
2060 
2061 	return hcon->iso_qos.bcast.big == iso_pi(sk)->qos.bcast.big;
2062 }
2063 
2064 static bool iso_match_pa_sync_flag(struct sock *sk, void *data)
2065 {
2066 	return test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags);
2067 }
2068 
2069 static bool iso_match_dst(struct sock *sk, void *data)
2070 {
2071 	return !bacmp(&iso_pi(sk)->dst, (bdaddr_t *)data);
2072 }
2073 
2074 static void iso_conn_ready(struct iso_conn *conn)
2075 {
2076 	struct sock *parent = NULL;
2077 	struct sock *sk = conn->sk;
2078 	struct hci_ev_le_big_sync_established *ev = NULL;
2079 	struct hci_ev_le_pa_sync_established *ev2 = NULL;
2080 	struct hci_ev_le_per_adv_report *ev3 = NULL;
2081 	struct hci_conn *hcon;
2082 	struct hci_dev *hdev;
2083 
2084 	BT_DBG("conn %p", conn);
2085 
2086 	if (sk) {
2087 		/* Attempt to update source address in case of BIS Sender if
2088 		 * the advertisement is using a random address.
2089 		 */
2090 		if (conn->hcon->type == BIS_LINK &&
2091 		    conn->hcon->role == HCI_ROLE_MASTER &&
2092 		    !bacmp(&conn->hcon->dst, BDADDR_ANY)) {
2093 			struct hci_conn *bis = conn->hcon;
2094 			struct adv_info *adv;
2095 
2096 			adv = hci_find_adv_instance(bis->hdev,
2097 						    bis->iso_qos.bcast.bis);
2098 			if (adv && bacmp(&adv->random_addr, BDADDR_ANY)) {
2099 				lock_sock(sk);
2100 				iso_pi(sk)->src_type = BDADDR_LE_RANDOM;
2101 				bacpy(&iso_pi(sk)->src, &adv->random_addr);
2102 				release_sock(sk);
2103 			}
2104 		}
2105 
2106 		iso_sock_ready(conn->sk);
2107 	} else {
2108 		hcon = conn->hcon;
2109 		if (!hcon)
2110 			return;
2111 
2112 		hdev = hcon->hdev;
2113 
2114 		if (test_bit(HCI_CONN_BIG_SYNC, &hcon->flags)) {
2115 			/* A BIS slave hcon is notified to the ISO layer
2116 			 * after the Command Complete for the LE Setup
2117 			 * ISO Data Path command is received. Get the
2118 			 * parent socket that matches the hcon BIG handle.
2119 			 */
2120 			parent = iso_get_sock(hdev, &hcon->src, &hcon->dst,
2121 					      BT_LISTEN, iso_match_big_hcon,
2122 					      hcon);
2123 		} else if (test_bit(HCI_CONN_BIG_SYNC_FAILED, &hcon->flags)) {
2124 			ev = hci_recv_event_data(hcon->hdev,
2125 						 HCI_EVT_LE_BIG_SYNC_ESTABLISHED);
2126 
2127 			/* Get reference to PA sync parent socket, if it exists */
2128 			parent = iso_get_sock(hdev, &hcon->src, &hcon->dst,
2129 					      BT_LISTEN,
2130 					      iso_match_pa_sync_flag,
2131 					      NULL);
2132 			if (!parent && ev)
2133 				parent = iso_get_sock(hdev, &hcon->src,
2134 						      &hcon->dst,
2135 						      BT_LISTEN,
2136 						      iso_match_big, ev);
2137 		} else if (test_bit(HCI_CONN_PA_SYNC_FAILED, &hcon->flags)) {
2138 			ev2 = hci_recv_event_data(hcon->hdev,
2139 						  HCI_EV_LE_PA_SYNC_ESTABLISHED);
2140 			if (ev2)
2141 				parent = iso_get_sock(hdev, &hcon->src,
2142 						      &hcon->dst,
2143 						      BT_LISTEN,
2144 						      iso_match_sid, ev2);
2145 		} else if (test_bit(HCI_CONN_PA_SYNC, &hcon->flags)) {
2146 			ev3 = hci_recv_event_data(hcon->hdev,
2147 						  HCI_EV_LE_PER_ADV_REPORT);
2148 			if (ev3)
2149 				parent = iso_get_sock(hdev, &hcon->src,
2150 						      &hcon->dst,
2151 						      BT_LISTEN,
2152 						      iso_match_sync_handle_pa_report,
2153 						      ev3);
2154 		}
2155 
2156 		if (!parent)
2157 			parent = iso_get_sock(hdev, &hcon->src, BDADDR_ANY,
2158 					      BT_LISTEN, iso_match_dst, BDADDR_ANY);
2159 
2160 		if (!parent)
2161 			return;
2162 
2163 		lock_sock(parent);
2164 
2165 		sk = iso_sock_alloc(sock_net(parent), NULL,
2166 				    BTPROTO_ISO, GFP_ATOMIC, 0);
2167 		if (!sk) {
2168 			release_sock(parent);
2169 			return;
2170 		}
2171 
2172 		iso_sock_init(sk, parent);
2173 
2174 		bacpy(&iso_pi(sk)->src, &hcon->src);
2175 
2176 		/* Convert from HCI to three-value type */
2177 		if (hcon->src_type == ADDR_LE_DEV_PUBLIC)
2178 			iso_pi(sk)->src_type = BDADDR_LE_PUBLIC;
2179 		else
2180 			iso_pi(sk)->src_type = BDADDR_LE_RANDOM;
2181 
2182 		/* If hcon has no destination address (BDADDR_ANY) it means it
2183 		 * was created by HCI_EV_LE_BIG_SYNC_ESTABILISHED or
2184 		 * HCI_EV_LE_PA_SYNC_ESTABLISHED so we need to initialize using
2185 		 * the parent socket destination address.
2186 		 */
2187 		if (!bacmp(&hcon->dst, BDADDR_ANY)) {
2188 			bacpy(&hcon->dst, &iso_pi(parent)->dst);
2189 			hcon->dst_type = le_addr_type(iso_pi(parent)->dst_type);
2190 		}
2191 
2192 		if (test_bit(HCI_CONN_PA_SYNC, &hcon->flags)) {
2193 			iso_pi(sk)->qos = iso_pi(parent)->qos;
2194 			hcon->iso_qos = iso_pi(sk)->qos;
2195 			iso_pi(sk)->bc_sid = iso_pi(parent)->bc_sid;
2196 			iso_pi(sk)->bc_num_bis = iso_pi(parent)->bc_num_bis;
2197 			memcpy(iso_pi(sk)->bc_bis, iso_pi(parent)->bc_bis,
2198 			       ISO_MAX_NUM_BIS);
2199 			set_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags);
2200 		}
2201 
2202 		bacpy(&iso_pi(sk)->dst, &hcon->dst);
2203 
2204 		/* Convert from HCI to three-value type */
2205 		if (hcon->dst_type == ADDR_LE_DEV_PUBLIC)
2206 			iso_pi(sk)->dst_type = BDADDR_LE_PUBLIC;
2207 		else
2208 			iso_pi(sk)->dst_type = BDADDR_LE_RANDOM;
2209 
2210 		iso_pi(sk)->sync_handle = iso_pi(parent)->sync_handle;
2211 		memcpy(iso_pi(sk)->base, iso_pi(parent)->base, iso_pi(parent)->base_len);
2212 		iso_pi(sk)->base_len = iso_pi(parent)->base_len;
2213 
2214 		hci_conn_hold(hcon);
2215 		iso_chan_add(conn, sk, parent);
2216 
2217 		if ((ev && ((struct hci_evt_le_big_sync_established *)ev)->status) ||
2218 		    (ev2 && ev2->status)) {
2219 			/* Trigger error signal on child socket */
2220 			sk->sk_err = ECONNREFUSED;
2221 			sk->sk_error_report(sk);
2222 		}
2223 
2224 		if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
2225 			sk->sk_state = BT_CONNECT2;
2226 		else
2227 			sk->sk_state = BT_CONNECTED;
2228 
2229 		/* Wake up parent */
2230 		parent->sk_data_ready(parent);
2231 
2232 		release_sock(parent);
2233 		sock_put(parent);
2234 	}
2235 }
2236 
2237 static bool iso_match_sid(struct sock *sk, void *data)
2238 {
2239 	struct hci_ev_le_pa_sync_established *ev = data;
2240 
2241 	if (iso_pi(sk)->bc_sid == HCI_SID_INVALID)
2242 		return true;
2243 
2244 	return ev->sid == iso_pi(sk)->bc_sid;
2245 }
2246 
2247 static bool iso_match_sid_past(struct sock *sk, void *data)
2248 {
2249 	struct hci_ev_le_past_received *ev = data;
2250 
2251 	if (iso_pi(sk)->bc_sid == HCI_SID_INVALID)
2252 		return true;
2253 
2254 	return ev->sid == iso_pi(sk)->bc_sid;
2255 }
2256 
2257 static bool iso_match_sync_handle(struct sock *sk, void *data)
2258 {
2259 	struct hci_evt_le_big_info_adv_report *ev = data;
2260 
2261 	return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle;
2262 }
2263 
2264 static bool iso_match_sync_handle_pa_report(struct sock *sk, void *data)
2265 {
2266 	struct hci_ev_le_per_adv_report *ev = data;
2267 
2268 	return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle;
2269 }
2270 
2271 /* ----- ISO interface with lower layer (HCI) ----- */
2272 
2273 int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
2274 {
2275 	struct hci_ev_le_pa_sync_established *ev1;
2276 	struct hci_ev_le_past_received *ev1a;
2277 	struct hci_evt_le_big_info_adv_report *ev2;
2278 	struct hci_ev_le_per_adv_report *ev3;
2279 	struct sock *sk;
2280 
2281 	bt_dev_dbg(hdev, "bdaddr %pMR", bdaddr);
2282 
2283 	/* Broadcast receiver requires handling of some events before it can
2284 	 * proceed to establishing a BIG sync:
2285 	 *
2286 	 * 1. HCI_EV_LE_PA_SYNC_ESTABLISHED: The socket may specify a specific
2287 	 * SID to listen to and once sync is established its handle needs to
2288 	 * be stored in iso_pi(sk)->sync_handle so it can be matched once
2289 	 * receiving the BIG Info.
2290 	 * 1a. HCI_EV_LE_PAST_RECEIVED: alternative to 1.
2291 	 * 2. HCI_EVT_LE_BIG_INFO_ADV_REPORT: When connect_ind is triggered by a
2292 	 * a BIG Info it attempts to check if there any listening socket with
2293 	 * the same sync_handle and if it does then attempt to create a sync.
2294 	 * 3. HCI_EV_LE_PER_ADV_REPORT: When a PA report is received, it is stored
2295 	 * in iso_pi(sk)->base so it can be passed up to user, in the case of a
2296 	 * broadcast sink.
2297 	 */
2298 	ev1 = hci_recv_event_data(hdev, HCI_EV_LE_PA_SYNC_ESTABLISHED);
2299 	if (ev1) {
2300 		sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr, BT_LISTEN,
2301 				  iso_match_sid, ev1);
2302 		if (sk && !ev1->status) {
2303 			lock_sock(sk);
2304 			iso_pi(sk)->sync_handle = le16_to_cpu(ev1->handle);
2305 			iso_pi(sk)->bc_sid = ev1->sid;
2306 			release_sock(sk);
2307 		}
2308 
2309 		goto done;
2310 	}
2311 
2312 	ev1a = hci_recv_event_data(hdev, HCI_EV_LE_PAST_RECEIVED);
2313 	if (ev1a) {
2314 		sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr, BT_LISTEN,
2315 				  iso_match_sid_past, ev1a);
2316 		if (sk && !ev1a->status) {
2317 			lock_sock(sk);
2318 			iso_pi(sk)->sync_handle = le16_to_cpu(ev1a->sync_handle);
2319 			iso_pi(sk)->bc_sid = ev1a->sid;
2320 			release_sock(sk);
2321 		}
2322 
2323 		goto done;
2324 	}
2325 
2326 	ev2 = hci_recv_event_data(hdev, HCI_EVT_LE_BIG_INFO_ADV_REPORT);
2327 	if (ev2) {
2328 		/* Check if BIGInfo report has already been handled */
2329 		sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr, BT_CONNECTED,
2330 				  iso_match_sync_handle, ev2);
2331 		if (sk) {
2332 			sock_put(sk);
2333 			sk = NULL;
2334 			goto done;
2335 		}
2336 
2337 		/* Try to get PA sync socket, if it exists */
2338 		sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr, BT_CONNECT2,
2339 				  iso_match_sync_handle, ev2);
2340 		if (!sk)
2341 			sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr,
2342 					  BT_LISTEN,
2343 					  iso_match_sync_handle,
2344 					  ev2);
2345 
2346 		if (sk) {
2347 			int err = 0;
2348 			bool big_sync;
2349 			struct hci_conn *hcon;
2350 
2351 			lock_sock(sk);
2352 
2353 			hcon = iso_pi(sk)->conn->hcon;
2354 			iso_pi(sk)->qos.bcast.encryption = ev2->encryption;
2355 
2356 			if (ev2->num_bis < iso_pi(sk)->bc_num_bis)
2357 				iso_pi(sk)->bc_num_bis = ev2->num_bis;
2358 
2359 			big_sync = !test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags) &&
2360 				   !test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags);
2361 
2362 			if (big_sync)
2363 				err = hci_conn_big_create_sync(hdev, hcon,
2364 							       &iso_pi(sk)->qos,
2365 							       iso_pi(sk)->sync_handle,
2366 							       iso_pi(sk)->bc_num_bis,
2367 							       iso_pi(sk)->bc_bis);
2368 
2369 			release_sock(sk);
2370 
2371 			if (big_sync && err) {
2372 				bt_dev_err(hdev, "hci_le_big_create_sync: %d",
2373 					   err);
2374 				sock_put(sk);
2375 				sk = NULL;
2376 			}
2377 		}
2378 
2379 		goto done;
2380 	}
2381 
2382 	ev3 = hci_recv_event_data(hdev, HCI_EV_LE_PER_ADV_REPORT);
2383 	if (ev3) {
2384 		size_t base_len = 0;
2385 		u8 *base;
2386 		struct hci_conn *hcon;
2387 
2388 		sk = iso_get_sock(hdev, &hdev->bdaddr, bdaddr, BT_LISTEN,
2389 				  iso_match_sync_handle_pa_report, ev3);
2390 		if (!sk)
2391 			goto done;
2392 
2393 		hcon = iso_pi(sk)->conn->hcon;
2394 		if (!hcon)
2395 			goto done;
2396 
2397 		if (ev3->data_status == LE_PA_DATA_TRUNCATED) {
2398 			/* The controller was unable to retrieve PA data. */
2399 			memset(hcon->le_per_adv_data, 0,
2400 			       HCI_MAX_PER_AD_TOT_LEN);
2401 			hcon->le_per_adv_data_len = 0;
2402 			hcon->le_per_adv_data_offset = 0;
2403 			goto done;
2404 		}
2405 
2406 		if (hcon->le_per_adv_data_offset + ev3->length >
2407 		    HCI_MAX_PER_AD_TOT_LEN)
2408 			goto done;
2409 
2410 		memcpy(hcon->le_per_adv_data + hcon->le_per_adv_data_offset,
2411 		       ev3->data, ev3->length);
2412 		hcon->le_per_adv_data_offset += ev3->length;
2413 
2414 		if (ev3->data_status == LE_PA_DATA_COMPLETE) {
2415 			/* All PA data has been received. */
2416 			hcon->le_per_adv_data_len =
2417 				hcon->le_per_adv_data_offset;
2418 			hcon->le_per_adv_data_offset = 0;
2419 
2420 			/* Extract BASE */
2421 			base = eir_get_service_data(hcon->le_per_adv_data,
2422 						    hcon->le_per_adv_data_len,
2423 						    EIR_BAA_SERVICE_UUID,
2424 						    &base_len);
2425 
2426 			if (!base || base_len > BASE_MAX_LENGTH)
2427 				goto done;
2428 
2429 			lock_sock(sk);
2430 			memcpy(iso_pi(sk)->base, base, base_len);
2431 			iso_pi(sk)->base_len = base_len;
2432 			release_sock(sk);
2433 		} else {
2434 			/* This is a PA data fragment. Keep pa_data_len set to 0
2435 			 * until all data has been reassembled.
2436 			 */
2437 			hcon->le_per_adv_data_len = 0;
2438 		}
2439 	} else {
2440 		sk = iso_get_sock(hdev, &hdev->bdaddr, BDADDR_ANY,
2441 				  BT_LISTEN, iso_match_dst, BDADDR_ANY);
2442 	}
2443 
2444 done:
2445 	if (!sk)
2446 		return 0;
2447 
2448 	if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
2449 		*flags |= HCI_PROTO_DEFER;
2450 
2451 	sock_put(sk);
2452 
2453 	return HCI_LM_ACCEPT;
2454 }
2455 
2456 static void iso_connect_cfm(struct hci_conn *hcon, __u8 status)
2457 {
2458 	if (hcon->type != CIS_LINK && hcon->type != BIS_LINK &&
2459 	    hcon->type != PA_LINK) {
2460 		if (hcon->type != LE_LINK)
2461 			return;
2462 
2463 		/* Check if LE link has failed */
2464 		if (status) {
2465 			struct hci_link *link, *t;
2466 
2467 			list_for_each_entry_safe(link, t, &hcon->link_list,
2468 						 list)
2469 				iso_conn_del(link->conn, bt_to_errno(status));
2470 
2471 			return;
2472 		}
2473 
2474 		/* Create CIS if pending */
2475 		hci_le_create_cis_pending(hcon->hdev);
2476 		return;
2477 	}
2478 
2479 	BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
2480 
2481 	/* Similar to the success case, if HCI_CONN_BIG_SYNC_FAILED or
2482 	 * HCI_CONN_PA_SYNC_FAILED is set, queue the failed connection
2483 	 * into the accept queue of the listening socket and wake up
2484 	 * userspace, to inform the user about the event.
2485 	 */
2486 	if (!status || test_bit(HCI_CONN_BIG_SYNC_FAILED, &hcon->flags) ||
2487 	    test_bit(HCI_CONN_PA_SYNC_FAILED, &hcon->flags)) {
2488 		struct iso_conn *conn;
2489 
2490 		conn = iso_conn_add(hcon);
2491 		if (conn)
2492 			iso_conn_ready(conn);
2493 	} else {
2494 		iso_conn_del(hcon, bt_to_errno(status));
2495 	}
2496 }
2497 
2498 static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason)
2499 {
2500 	if (hcon->type != CIS_LINK && hcon->type !=  BIS_LINK &&
2501 	    hcon->type != PA_LINK)
2502 		return;
2503 
2504 	BT_DBG("hcon %p reason %d", hcon, reason);
2505 
2506 	iso_conn_del(hcon, bt_to_errno(reason));
2507 }
2508 
2509 int iso_recv(struct hci_dev *hdev, u16 handle, struct sk_buff *skb, u16 flags)
2510 {
2511 	struct hci_conn *hcon;
2512 	struct iso_conn *conn;
2513 	struct skb_shared_hwtstamps *hwts;
2514 	__u16 pb, ts, len, sn;
2515 
2516 	hci_dev_lock(hdev);
2517 
2518 	hcon = hci_conn_hash_lookup_handle(hdev, handle);
2519 	if (!hcon) {
2520 		hci_dev_unlock(hdev);
2521 		kfree_skb(skb);
2522 		return -ENOENT;
2523 	}
2524 
2525 	conn = iso_conn_hold_unless_zero(hcon->iso_data);
2526 	hcon = NULL;
2527 
2528 	hci_dev_unlock(hdev);
2529 
2530 	if (!conn) {
2531 		kfree_skb(skb);
2532 		return -EINVAL;
2533 	}
2534 
2535 	pb     = hci_iso_flags_pb(flags);
2536 	ts     = hci_iso_flags_ts(flags);
2537 
2538 	BT_DBG("conn %p len %d pb 0x%x ts 0x%x", conn, skb->len, pb, ts);
2539 
2540 	switch (pb) {
2541 	case ISO_START:
2542 	case ISO_SINGLE:
2543 		if (conn->rx_skb || conn->rx_len) {
2544 			BT_ERR("Unexpected start frame (len %d)", skb->len);
2545 			kfree_skb(conn->rx_skb);
2546 			conn->rx_skb = NULL;
2547 			conn->rx_len = 0;
2548 		}
2549 
2550 		if (ts) {
2551 			struct hci_iso_ts_data_hdr *hdr;
2552 
2553 			hdr = skb_pull_data(skb, HCI_ISO_TS_DATA_HDR_SIZE);
2554 			if (!hdr) {
2555 				BT_ERR("Frame is too short (len %d)", skb->len);
2556 				goto drop;
2557 			}
2558 
2559 			/*  Record the timestamp to skb */
2560 			hwts = skb_hwtstamps(skb);
2561 			hwts->hwtstamp = us_to_ktime(le32_to_cpu(hdr->ts));
2562 
2563 			sn = __le16_to_cpu(hdr->sn);
2564 			len = __le16_to_cpu(hdr->slen);
2565 		} else {
2566 			struct hci_iso_data_hdr *hdr;
2567 
2568 			hdr = skb_pull_data(skb, HCI_ISO_DATA_HDR_SIZE);
2569 			if (!hdr) {
2570 				BT_ERR("Frame is too short (len %d)", skb->len);
2571 				goto drop;
2572 			}
2573 
2574 			sn = __le16_to_cpu(hdr->sn);
2575 			len = __le16_to_cpu(hdr->slen);
2576 		}
2577 
2578 		flags  = hci_iso_data_flags(len);
2579 		len    = hci_iso_data_len(len);
2580 
2581 		BT_DBG("Start: total len %d, frag len %d flags 0x%4.4x sn %d",
2582 		       len, skb->len, flags, sn);
2583 
2584 		if (len == skb->len) {
2585 			/* Complete frame received */
2586 			hci_skb_pkt_status(skb) = flags & 0x03;
2587 			hci_skb_pkt_seqnum(skb) = sn;
2588 			iso_recv_frame(conn, skb);
2589 			goto done;
2590 		}
2591 
2592 		if (pb == ISO_SINGLE) {
2593 			BT_ERR("Frame malformed (len %d, expected len %d)",
2594 			       skb->len, len);
2595 			goto drop;
2596 		}
2597 
2598 		if (skb->len > len) {
2599 			BT_ERR("Frame is too long (len %d, expected len %d)",
2600 			       skb->len, len);
2601 			goto drop;
2602 		}
2603 
2604 		/* Allocate skb for the complete frame (with header) */
2605 		conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
2606 		if (!conn->rx_skb)
2607 			goto drop;
2608 
2609 		hci_skb_pkt_status(conn->rx_skb) = flags & 0x03;
2610 		hci_skb_pkt_seqnum(conn->rx_skb) = sn;
2611 		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
2612 					  skb->len);
2613 		conn->rx_len = len - skb->len;
2614 
2615 		/* Copy hw timestamp from skb to rx_skb if present */
2616 		if (ts) {
2617 			hwts = skb_hwtstamps(conn->rx_skb);
2618 			hwts->hwtstamp = skb_hwtstamps(skb)->hwtstamp;
2619 		}
2620 
2621 		break;
2622 
2623 	case ISO_CONT:
2624 	case ISO_END:
2625 		BT_DBG("%s: frag len %d (expecting %d)",
2626 		       (pb == ISO_END) ? "End" : "Cont", skb->len,
2627 		       conn->rx_len);
2628 
2629 		if (!conn->rx_skb) {
2630 			BT_ERR("Unexpected ISO %s frame (len %d)",
2631 			       (pb == ISO_END) ? "End" : "Cont", skb->len);
2632 			goto drop;
2633 		}
2634 
2635 		if (skb->len > conn->rx_len) {
2636 			BT_ERR("Fragment is too long (len %d, expected %d)",
2637 			       skb->len, conn->rx_len);
2638 			kfree_skb(conn->rx_skb);
2639 			conn->rx_skb = NULL;
2640 			conn->rx_len = 0;
2641 			goto drop;
2642 		}
2643 
2644 		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
2645 					  skb->len);
2646 		conn->rx_len -= skb->len;
2647 
2648 		if (pb == ISO_CONT)
2649 			break;
2650 
2651 		if (!conn->rx_len) {
2652 			struct sk_buff *rx_skb = conn->rx_skb;
2653 
2654 			/* Complete frame received. iso_recv_frame
2655 			 * takes ownership of the skb so set the global
2656 			 * rx_skb pointer to NULL first.
2657 			 */
2658 			conn->rx_skb = NULL;
2659 			iso_recv_frame(conn, rx_skb);
2660 		} else {
2661 			BT_ERR("ISO fragment incomplete (len %d, expected %d)",
2662 			       skb->len, conn->rx_len);
2663 			kfree_skb(conn->rx_skb);
2664 			conn->rx_skb = NULL;
2665 			conn->rx_len = 0;
2666 			goto drop;
2667 		}
2668 		break;
2669 	}
2670 
2671 drop:
2672 	kfree_skb(skb);
2673 done:
2674 	iso_conn_put(conn);
2675 	return 0;
2676 }
2677 
2678 static struct hci_cb iso_cb = {
2679 	.name		= "ISO",
2680 	.connect_cfm	= iso_connect_cfm,
2681 	.disconn_cfm	= iso_disconn_cfm,
2682 };
2683 
2684 static int iso_debugfs_show(struct seq_file *f, void *p)
2685 {
2686 	struct sock *sk;
2687 
2688 	read_lock(&iso_sk_list.lock);
2689 
2690 	sk_for_each(sk, &iso_sk_list.head) {
2691 		seq_printf(f, "%pMR %pMR %d\n", &iso_pi(sk)->src,
2692 			   &iso_pi(sk)->dst, sk->sk_state);
2693 	}
2694 
2695 	read_unlock(&iso_sk_list.lock);
2696 
2697 	return 0;
2698 }
2699 
2700 DEFINE_SHOW_ATTRIBUTE(iso_debugfs);
2701 
2702 static struct dentry *iso_debugfs;
2703 
2704 static const struct proto_ops iso_sock_ops = {
2705 	.family		= PF_BLUETOOTH,
2706 	.owner		= THIS_MODULE,
2707 	.release	= iso_sock_release,
2708 	.bind		= iso_sock_bind,
2709 	.connect	= iso_sock_connect,
2710 	.listen		= iso_sock_listen,
2711 	.accept		= iso_sock_accept,
2712 	.getname	= iso_sock_getname,
2713 	.sendmsg	= iso_sock_sendmsg,
2714 	.recvmsg	= iso_sock_recvmsg,
2715 	.poll		= bt_sock_poll,
2716 	.ioctl		= bt_sock_ioctl,
2717 	.mmap		= sock_no_mmap,
2718 	.socketpair	= sock_no_socketpair,
2719 	.shutdown	= iso_sock_shutdown,
2720 	.setsockopt	= iso_sock_setsockopt,
2721 	.getsockopt_iter = iso_sock_getsockopt
2722 };
2723 
2724 static const struct net_proto_family iso_sock_family_ops = {
2725 	.family	= PF_BLUETOOTH,
2726 	.owner	= THIS_MODULE,
2727 	.create	= iso_sock_create,
2728 };
2729 
2730 static bool inited;
2731 
2732 bool iso_inited(void)
2733 {
2734 	return inited;
2735 }
2736 
2737 int iso_init(void)
2738 {
2739 	int err;
2740 
2741 	BUILD_BUG_ON(sizeof(struct sockaddr_iso) > sizeof(struct sockaddr));
2742 
2743 	if (inited)
2744 		return -EALREADY;
2745 
2746 	err = proto_register(&iso_proto, 0);
2747 	if (err < 0)
2748 		return err;
2749 
2750 	err = bt_sock_register(BTPROTO_ISO, &iso_sock_family_ops);
2751 	if (err < 0) {
2752 		BT_ERR("ISO socket registration failed");
2753 		goto error;
2754 	}
2755 
2756 	err = bt_procfs_init(&init_net, "iso", &iso_sk_list, NULL);
2757 	if (err < 0) {
2758 		BT_ERR("Failed to create ISO proc file");
2759 		bt_sock_unregister(BTPROTO_ISO);
2760 		goto error;
2761 	}
2762 
2763 	BT_INFO("ISO socket layer initialized");
2764 
2765 	hci_register_cb(&iso_cb);
2766 
2767 	if (!IS_ERR_OR_NULL(bt_debugfs))
2768 		iso_debugfs = debugfs_create_file("iso", 0444, bt_debugfs,
2769 						  NULL, &iso_debugfs_fops);
2770 
2771 	inited = true;
2772 
2773 	return 0;
2774 
2775 error:
2776 	proto_unregister(&iso_proto);
2777 	return err;
2778 }
2779 
2780 int iso_exit(void)
2781 {
2782 	if (!inited)
2783 		return -EALREADY;
2784 
2785 	bt_procfs_cleanup(&init_net, "iso");
2786 
2787 	debugfs_remove(iso_debugfs);
2788 	iso_debugfs = NULL;
2789 
2790 	hci_unregister_cb(&iso_cb);
2791 
2792 	bt_sock_unregister(BTPROTO_ISO);
2793 
2794 	proto_unregister(&iso_proto);
2795 
2796 	inited = false;
2797 
2798 	return 0;
2799 }
2800