Linux Audio

Check our new training course

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