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