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