iso.c 37 KB

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