1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 RFCOMM implementation for Linux Bluetooth stack (BlueZ). 4 Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com> 5 Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org> 6 7 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 8 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 9 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 10 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 11 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 12 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 16 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 17 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 18 SOFTWARE IS DISCLAIMED. 19 */ 20 21 /* 22 * Bluetooth RFCOMM core. 23 */ 24 25 #include <linux/module.h> 26 #include <linux/debugfs.h> 27 #include <linux/kthread.h> 28 #include <linux/unaligned.h> 29 30 #include <net/bluetooth/bluetooth.h> 31 #include <net/bluetooth/hci_core.h> 32 #include <net/bluetooth/l2cap.h> 33 #include <net/bluetooth/rfcomm.h> 34 35 #include <trace/events/sock.h> 36 37 #define VERSION "1.11" 38 39 static bool disable_cfc; 40 static bool l2cap_ertm; 41 static int channel_mtu = -1; 42 43 static struct task_struct *rfcomm_thread; 44 45 static DEFINE_MUTEX(rfcomm_mutex); 46 #define rfcomm_lock() mutex_lock(&rfcomm_mutex) 47 #define rfcomm_unlock() mutex_unlock(&rfcomm_mutex) 48 49 50 static LIST_HEAD(session_list); 51 52 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len); 53 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci); 54 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci); 55 static int rfcomm_queue_disc(struct rfcomm_dlc *d); 56 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type); 57 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d); 58 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig); 59 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len); 60 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits); 61 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr); 62 63 static void rfcomm_process_connect(struct rfcomm_session *s); 64 65 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, 66 bdaddr_t *dst, 67 u8 sec_level, 68 int *err); 69 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst); 70 static struct rfcomm_session *rfcomm_session_del(struct rfcomm_session *s); 71 72 /* ---- RFCOMM frame parsing macros ---- */ 73 #define __get_dlci(b) ((b & 0xfc) >> 2) 74 #define __get_type(b) ((b & 0xef)) 75 76 #define __test_ea(b) ((b & 0x01)) 77 #define __test_cr(b) (!!(b & 0x02)) 78 #define __test_pf(b) (!!(b & 0x10)) 79 80 #define __session_dir(s) ((s)->initiator ? 0x00 : 0x01) 81 82 #define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01) 83 #define __ctrl(type, pf) (((type & 0xef) | (pf << 4))) 84 #define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir) 85 #define __srv_channel(dlci) (dlci >> 1) 86 87 #define __len8(len) (((len) << 1) | 1) 88 #define __len16(len) ((len) << 1) 89 90 /* MCC macros */ 91 #define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01)) 92 #define __get_mcc_type(b) ((b & 0xfc) >> 2) 93 #define __get_mcc_len(b) ((b & 0xfe) >> 1) 94 95 /* RPN macros */ 96 #define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x7) << 3)) 97 #define __get_rpn_data_bits(line) ((line) & 0x3) 98 #define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1) 99 #define __get_rpn_parity(line) (((line) >> 3) & 0x7) 100 101 static DECLARE_WAIT_QUEUE_HEAD(rfcomm_wq); 102 103 static void rfcomm_schedule(void) 104 { 105 wake_up_all(&rfcomm_wq); 106 } 107 108 /* ---- RFCOMM FCS computation ---- */ 109 110 /* reversed, 8-bit, poly=0x07 */ 111 static unsigned char rfcomm_crc_table[256] = { 112 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75, 113 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b, 114 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69, 115 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67, 116 117 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d, 118 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43, 119 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51, 120 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f, 121 122 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05, 123 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b, 124 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19, 125 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17, 126 127 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d, 128 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33, 129 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21, 130 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f, 131 132 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95, 133 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b, 134 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89, 135 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87, 136 137 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad, 138 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3, 139 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1, 140 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf, 141 142 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5, 143 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb, 144 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9, 145 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7, 146 147 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd, 148 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3, 149 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1, 150 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf 151 }; 152 153 /* CRC on 2 bytes */ 154 #define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]]) 155 156 /* FCS on 2 bytes */ 157 static inline u8 __fcs(u8 *data) 158 { 159 return 0xff - __crc(data); 160 } 161 162 /* FCS on 3 bytes */ 163 static inline u8 __fcs2(u8 *data) 164 { 165 return 0xff - rfcomm_crc_table[__crc(data) ^ data[2]]; 166 } 167 168 /* Check FCS */ 169 static inline int __check_fcs(u8 *data, int type, u8 fcs) 170 { 171 u8 f = __crc(data); 172 173 if (type != RFCOMM_UIH) 174 f = rfcomm_crc_table[f ^ data[2]]; 175 176 return rfcomm_crc_table[f ^ fcs] != 0xcf; 177 } 178 179 /* ---- L2CAP callbacks ---- */ 180 static void rfcomm_l2state_change(struct sock *sk) 181 { 182 BT_DBG("%p state %d", sk, sk->sk_state); 183 rfcomm_schedule(); 184 } 185 186 static void rfcomm_l2data_ready(struct sock *sk) 187 { 188 trace_sk_data_ready(sk); 189 190 BT_DBG("%p", sk); 191 rfcomm_schedule(); 192 } 193 194 static int rfcomm_l2sock_create(struct socket **sock) 195 { 196 int err; 197 198 BT_DBG(""); 199 200 err = sock_create_kern(&init_net, PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock); 201 if (!err) { 202 struct sock *sk = (*sock)->sk; 203 sk->sk_data_ready = rfcomm_l2data_ready; 204 sk->sk_state_change = rfcomm_l2state_change; 205 } 206 return err; 207 } 208 209 static int rfcomm_check_security(struct rfcomm_dlc *d) 210 { 211 struct sock *sk = d->session->sock->sk; 212 struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn; 213 214 __u8 auth_type; 215 216 switch (d->sec_level) { 217 case BT_SECURITY_HIGH: 218 case BT_SECURITY_FIPS: 219 auth_type = HCI_AT_GENERAL_BONDING_MITM; 220 break; 221 case BT_SECURITY_MEDIUM: 222 auth_type = HCI_AT_GENERAL_BONDING; 223 break; 224 default: 225 auth_type = HCI_AT_NO_BONDING; 226 break; 227 } 228 229 return hci_conn_security(conn->hcon, d->sec_level, auth_type, 230 d->out); 231 } 232 233 static void rfcomm_session_timeout(struct timer_list *t) 234 { 235 struct rfcomm_session *s = timer_container_of(s, t, timer); 236 237 BT_DBG("session %p state %ld", s, s->state); 238 239 set_bit(RFCOMM_TIMED_OUT, &s->flags); 240 rfcomm_schedule(); 241 } 242 243 static void rfcomm_session_set_timer(struct rfcomm_session *s, long timeout) 244 { 245 BT_DBG("session %p state %ld timeout %ld", s, s->state, timeout); 246 247 mod_timer(&s->timer, jiffies + timeout); 248 } 249 250 static void rfcomm_session_clear_timer(struct rfcomm_session *s) 251 { 252 BT_DBG("session %p state %ld", s, s->state); 253 254 timer_delete_sync(&s->timer); 255 } 256 257 /* ---- RFCOMM DLCs ---- */ 258 static void rfcomm_dlc_timeout(struct timer_list *t) 259 { 260 struct rfcomm_dlc *d = timer_container_of(d, t, timer); 261 262 BT_DBG("dlc %p state %ld", d, d->state); 263 264 set_bit(RFCOMM_TIMED_OUT, &d->flags); 265 rfcomm_dlc_put(d); 266 rfcomm_schedule(); 267 } 268 269 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout) 270 { 271 BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout); 272 273 if (!mod_timer(&d->timer, jiffies + timeout)) 274 rfcomm_dlc_hold(d); 275 } 276 277 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d) 278 { 279 BT_DBG("dlc %p state %ld", d, d->state); 280 281 if (timer_delete(&d->timer)) 282 rfcomm_dlc_put(d); 283 } 284 285 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d) 286 { 287 BT_DBG("%p", d); 288 289 d->state = BT_OPEN; 290 d->flags = 0; 291 d->mscex = 0; 292 d->sec_level = BT_SECURITY_LOW; 293 d->mtu = RFCOMM_DEFAULT_MTU; 294 d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV; 295 296 d->cfc = RFCOMM_CFC_DISABLED; 297 d->rx_credits = RFCOMM_DEFAULT_CREDITS; 298 } 299 300 struct rfcomm_dlc *rfcomm_dlc_alloc(gfp_t prio) 301 { 302 struct rfcomm_dlc *d = kzalloc_obj(*d, prio); 303 304 if (!d) 305 return NULL; 306 307 timer_setup(&d->timer, rfcomm_dlc_timeout, 0); 308 309 skb_queue_head_init(&d->tx_queue); 310 mutex_init(&d->lock); 311 refcount_set(&d->refcnt, 1); 312 313 rfcomm_dlc_clear_state(d); 314 315 BT_DBG("%p", d); 316 317 return d; 318 } 319 320 void rfcomm_dlc_free(struct rfcomm_dlc *d) 321 { 322 BT_DBG("%p", d); 323 324 skb_queue_purge(&d->tx_queue); 325 kfree(d); 326 } 327 328 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d) 329 { 330 BT_DBG("dlc %p session %p", d, s); 331 332 rfcomm_session_clear_timer(s); 333 rfcomm_dlc_hold(d); 334 list_add(&d->list, &s->dlcs); 335 d->session = s; 336 } 337 338 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d) 339 { 340 struct rfcomm_session *s = d->session; 341 342 BT_DBG("dlc %p refcnt %d session %p", d, refcount_read(&d->refcnt), s); 343 344 list_del(&d->list); 345 d->session = NULL; 346 rfcomm_dlc_put(d); 347 348 if (list_empty(&s->dlcs)) 349 rfcomm_session_set_timer(s, RFCOMM_IDLE_TIMEOUT); 350 } 351 352 static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci) 353 { 354 struct rfcomm_dlc *d; 355 356 list_for_each_entry(d, &s->dlcs, list) 357 if (d->dlci == dlci) 358 return d; 359 360 return NULL; 361 } 362 363 static int rfcomm_check_channel(u8 channel) 364 { 365 return channel < 1 || channel > 30; 366 } 367 368 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) 369 { 370 struct rfcomm_session *s; 371 int err = 0; 372 u8 dlci; 373 374 BT_DBG("dlc %p state %ld %pMR -> %pMR channel %d", 375 d, d->state, src, dst, channel); 376 377 if (rfcomm_check_channel(channel)) 378 return -EINVAL; 379 380 if (d->state != BT_OPEN && d->state != BT_CLOSED) 381 return 0; 382 383 s = rfcomm_session_get(src, dst); 384 if (!s) { 385 s = rfcomm_session_create(src, dst, d->sec_level, &err); 386 if (!s) 387 return err; 388 } 389 390 dlci = __dlci(__session_dir(s), channel); 391 392 /* Check if DLCI already exists */ 393 if (rfcomm_dlc_get(s, dlci)) 394 return -EBUSY; 395 396 rfcomm_dlc_clear_state(d); 397 398 d->dlci = dlci; 399 d->addr = __addr(s->initiator, dlci); 400 d->priority = 7; 401 402 d->state = BT_CONFIG; 403 rfcomm_dlc_link(s, d); 404 405 d->out = 1; 406 407 d->mtu = s->mtu; 408 d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc; 409 410 if (s->state == BT_CONNECTED) { 411 if (rfcomm_check_security(d)) 412 rfcomm_send_pn(s, 1, d); 413 else 414 set_bit(RFCOMM_AUTH_PENDING, &d->flags); 415 } 416 417 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); 418 419 return 0; 420 } 421 422 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) 423 { 424 int r; 425 426 rfcomm_lock(); 427 428 r = __rfcomm_dlc_open(d, src, dst, channel); 429 430 rfcomm_unlock(); 431 return r; 432 } 433 434 static void __rfcomm_dlc_disconn(struct rfcomm_dlc *d) 435 { 436 struct rfcomm_session *s = d->session; 437 438 d->state = BT_DISCONN; 439 if (skb_queue_empty(&d->tx_queue)) { 440 rfcomm_send_disc(s, d->dlci); 441 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT); 442 } else { 443 rfcomm_queue_disc(d); 444 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2); 445 } 446 } 447 448 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) 449 { 450 struct rfcomm_session *s = d->session; 451 if (!s) 452 return 0; 453 454 BT_DBG("dlc %p state %ld dlci %d err %d session %p", 455 d, d->state, d->dlci, err, s); 456 457 switch (d->state) { 458 case BT_CONNECT: 459 case BT_CONFIG: 460 case BT_OPEN: 461 case BT_CONNECT2: 462 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) { 463 set_bit(RFCOMM_AUTH_REJECT, &d->flags); 464 rfcomm_schedule(); 465 return 0; 466 } 467 } 468 469 switch (d->state) { 470 case BT_CONNECT: 471 case BT_CONNECTED: 472 __rfcomm_dlc_disconn(d); 473 break; 474 475 case BT_CONFIG: 476 if (s->state != BT_BOUND) { 477 __rfcomm_dlc_disconn(d); 478 break; 479 } 480 /* if closing a dlc in a session that hasn't been started, 481 * just close and unlink the dlc 482 */ 483 fallthrough; 484 485 default: 486 rfcomm_dlc_clear_timer(d); 487 488 rfcomm_dlc_lock(d); 489 d->state = BT_CLOSED; 490 d->state_change(d, err); 491 rfcomm_dlc_unlock(d); 492 493 skb_queue_purge(&d->tx_queue); 494 rfcomm_dlc_unlink(d); 495 } 496 497 return 0; 498 } 499 500 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err) 501 { 502 int r = 0; 503 struct rfcomm_dlc *d_list; 504 struct rfcomm_session *s, *s_list; 505 506 BT_DBG("dlc %p state %ld dlci %d err %d", d, d->state, d->dlci, err); 507 508 rfcomm_lock(); 509 510 s = d->session; 511 if (!s) 512 goto no_session; 513 514 /* after waiting on the mutex check the session still exists 515 * then check the dlc still exists 516 */ 517 list_for_each_entry(s_list, &session_list, list) { 518 if (s_list == s) { 519 list_for_each_entry(d_list, &s->dlcs, list) { 520 if (d_list == d) { 521 r = __rfcomm_dlc_close(d, err); 522 break; 523 } 524 } 525 break; 526 } 527 } 528 529 no_session: 530 rfcomm_unlock(); 531 return r; 532 } 533 534 struct rfcomm_dlc *rfcomm_dlc_exists(bdaddr_t *src, bdaddr_t *dst, u8 channel) 535 { 536 struct rfcomm_session *s; 537 struct rfcomm_dlc *dlc = NULL; 538 u8 dlci; 539 540 if (rfcomm_check_channel(channel)) 541 return ERR_PTR(-EINVAL); 542 543 rfcomm_lock(); 544 s = rfcomm_session_get(src, dst); 545 if (s) { 546 dlci = __dlci(__session_dir(s), channel); 547 dlc = rfcomm_dlc_get(s, dlci); 548 } 549 rfcomm_unlock(); 550 return dlc; 551 } 552 553 static int rfcomm_dlc_send_frag(struct rfcomm_dlc *d, struct sk_buff *frag) 554 { 555 int len = frag->len; 556 557 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len); 558 559 if (len > d->mtu) 560 return -EINVAL; 561 562 rfcomm_make_uih(frag, d->addr); 563 __skb_queue_tail(&d->tx_queue, frag); 564 565 return len; 566 } 567 568 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb) 569 { 570 unsigned long flags; 571 struct sk_buff *frag, *next; 572 int len; 573 574 if (d->state != BT_CONNECTED) 575 return -ENOTCONN; 576 577 frag = skb_shinfo(skb)->frag_list; 578 skb_shinfo(skb)->frag_list = NULL; 579 580 /* Queue all fragments atomically. */ 581 spin_lock_irqsave(&d->tx_queue.lock, flags); 582 583 len = rfcomm_dlc_send_frag(d, skb); 584 if (len < 0 || !frag) 585 goto unlock; 586 587 for (; frag; frag = next) { 588 int ret; 589 590 next = frag->next; 591 592 ret = rfcomm_dlc_send_frag(d, frag); 593 if (ret < 0) { 594 dev_kfree_skb_irq(frag); 595 goto unlock; 596 } 597 598 len += ret; 599 } 600 601 unlock: 602 spin_unlock_irqrestore(&d->tx_queue.lock, flags); 603 604 if (len > 0 && !test_bit(RFCOMM_TX_THROTTLED, &d->flags)) 605 rfcomm_schedule(); 606 return len; 607 } 608 609 void rfcomm_dlc_send_noerror(struct rfcomm_dlc *d, struct sk_buff *skb) 610 { 611 int len = skb->len; 612 613 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len); 614 615 rfcomm_make_uih(skb, d->addr); 616 skb_queue_tail(&d->tx_queue, skb); 617 618 if (d->state == BT_CONNECTED && 619 !test_bit(RFCOMM_TX_THROTTLED, &d->flags)) 620 rfcomm_schedule(); 621 } 622 623 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d) 624 { 625 BT_DBG("dlc %p state %ld", d, d->state); 626 627 if (!d->cfc) { 628 d->v24_sig |= RFCOMM_V24_FC; 629 set_bit(RFCOMM_MSC_PENDING, &d->flags); 630 } 631 rfcomm_schedule(); 632 } 633 634 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d) 635 { 636 BT_DBG("dlc %p state %ld", d, d->state); 637 638 if (!d->cfc) { 639 d->v24_sig &= ~RFCOMM_V24_FC; 640 set_bit(RFCOMM_MSC_PENDING, &d->flags); 641 } 642 rfcomm_schedule(); 643 } 644 645 /* 646 Set/get modem status functions use _local_ status i.e. what we report 647 to the other side. 648 Remote status is provided by dlc->modem_status() callback. 649 */ 650 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig) 651 { 652 BT_DBG("dlc %p state %ld v24_sig 0x%x", 653 d, d->state, v24_sig); 654 655 if (test_bit(RFCOMM_RX_THROTTLED, &d->flags)) 656 v24_sig |= RFCOMM_V24_FC; 657 else 658 v24_sig &= ~RFCOMM_V24_FC; 659 660 d->v24_sig = v24_sig; 661 662 if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags)) 663 rfcomm_schedule(); 664 665 return 0; 666 } 667 668 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig) 669 { 670 BT_DBG("dlc %p state %ld v24_sig 0x%x", 671 d, d->state, d->v24_sig); 672 673 *v24_sig = d->v24_sig; 674 return 0; 675 } 676 677 /* ---- RFCOMM sessions ---- */ 678 static struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state) 679 { 680 struct rfcomm_session *s = kzalloc_obj(*s); 681 682 if (!s) 683 return NULL; 684 685 BT_DBG("session %p sock %p", s, sock); 686 687 timer_setup(&s->timer, rfcomm_session_timeout, 0); 688 689 INIT_LIST_HEAD(&s->dlcs); 690 s->state = state; 691 s->sock = sock; 692 693 s->mtu = RFCOMM_DEFAULT_MTU; 694 s->cfc = disable_cfc ? RFCOMM_CFC_DISABLED : RFCOMM_CFC_UNKNOWN; 695 696 /* Do not increment module usage count for listening sessions. 697 * Otherwise we won't be able to unload the module. */ 698 if (state != BT_LISTEN) 699 if (!try_module_get(THIS_MODULE)) { 700 kfree(s); 701 return NULL; 702 } 703 704 list_add(&s->list, &session_list); 705 706 return s; 707 } 708 709 static struct rfcomm_session *rfcomm_session_del(struct rfcomm_session *s) 710 { 711 int state = s->state; 712 713 BT_DBG("session %p state %ld", s, s->state); 714 715 list_del(&s->list); 716 717 rfcomm_session_clear_timer(s); 718 sock_release(s->sock); 719 kfree(s); 720 721 if (state != BT_LISTEN) 722 module_put(THIS_MODULE); 723 724 return NULL; 725 } 726 727 static struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst) 728 { 729 struct rfcomm_session *s, *n; 730 struct l2cap_chan *chan; 731 list_for_each_entry_safe(s, n, &session_list, list) { 732 chan = l2cap_pi(s->sock->sk)->chan; 733 734 if ((!bacmp(src, BDADDR_ANY) || !bacmp(&chan->src, src)) && 735 !bacmp(&chan->dst, dst)) 736 return s; 737 } 738 return NULL; 739 } 740 741 static struct rfcomm_session *rfcomm_session_close(struct rfcomm_session *s, 742 int err) 743 { 744 struct rfcomm_dlc *d, *n; 745 746 s->state = BT_CLOSED; 747 748 BT_DBG("session %p state %ld err %d", s, s->state, err); 749 750 /* Close all dlcs */ 751 list_for_each_entry_safe(d, n, &s->dlcs, list) { 752 d->state = BT_CLOSED; 753 __rfcomm_dlc_close(d, err); 754 } 755 756 rfcomm_session_clear_timer(s); 757 return rfcomm_session_del(s); 758 } 759 760 static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, 761 bdaddr_t *dst, 762 u8 sec_level, 763 int *err) 764 { 765 struct rfcomm_session *s = NULL; 766 struct sockaddr_l2 addr; 767 struct socket *sock; 768 struct sock *sk; 769 770 BT_DBG("%pMR -> %pMR", src, dst); 771 772 *err = rfcomm_l2sock_create(&sock); 773 if (*err < 0) 774 return NULL; 775 776 bacpy(&addr.l2_bdaddr, src); 777 addr.l2_family = AF_BLUETOOTH; 778 addr.l2_psm = 0; 779 addr.l2_cid = 0; 780 addr.l2_bdaddr_type = BDADDR_BREDR; 781 *err = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr)); 782 if (*err < 0) 783 goto failed; 784 785 /* Set L2CAP options */ 786 sk = sock->sk; 787 lock_sock(sk); 788 /* Set MTU to 0 so L2CAP can auto select the MTU */ 789 l2cap_pi(sk)->chan->imtu = 0; 790 l2cap_pi(sk)->chan->sec_level = sec_level; 791 if (l2cap_ertm) 792 l2cap_pi(sk)->chan->mode = L2CAP_MODE_ERTM; 793 release_sock(sk); 794 795 s = rfcomm_session_add(sock, BT_BOUND); 796 if (!s) { 797 *err = -ENOMEM; 798 goto failed; 799 } 800 801 s->initiator = 1; 802 803 bacpy(&addr.l2_bdaddr, dst); 804 addr.l2_family = AF_BLUETOOTH; 805 addr.l2_psm = cpu_to_le16(L2CAP_PSM_RFCOMM); 806 addr.l2_cid = 0; 807 addr.l2_bdaddr_type = BDADDR_BREDR; 808 *err = kernel_connect(sock, (struct sockaddr_unsized *)&addr, sizeof(addr), O_NONBLOCK); 809 if (*err == 0 || *err == -EINPROGRESS) 810 return s; 811 812 return rfcomm_session_del(s); 813 814 failed: 815 sock_release(sock); 816 return NULL; 817 } 818 819 void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst) 820 { 821 struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan; 822 if (src) 823 bacpy(src, &chan->src); 824 if (dst) 825 bacpy(dst, &chan->dst); 826 } 827 828 /* ---- RFCOMM frame sending ---- */ 829 static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len) 830 { 831 struct kvec iv = { data, len }; 832 struct msghdr msg; 833 834 BT_DBG("session %p len %d", s, len); 835 836 memset(&msg, 0, sizeof(msg)); 837 838 return kernel_sendmsg(s->sock, &msg, &iv, 1, len); 839 } 840 841 static int rfcomm_send_cmd(struct rfcomm_session *s, struct rfcomm_cmd *cmd) 842 { 843 BT_DBG("%p cmd %u", s, cmd->ctrl); 844 845 return rfcomm_send_frame(s, (void *) cmd, sizeof(*cmd)); 846 } 847 848 static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci) 849 { 850 struct rfcomm_cmd cmd; 851 852 BT_DBG("%p dlci %d", s, dlci); 853 854 cmd.addr = __addr(s->initiator, dlci); 855 cmd.ctrl = __ctrl(RFCOMM_SABM, 1); 856 cmd.len = __len8(0); 857 cmd.fcs = __fcs2((u8 *) &cmd); 858 859 return rfcomm_send_cmd(s, &cmd); 860 } 861 862 static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci) 863 { 864 struct rfcomm_cmd cmd; 865 866 BT_DBG("%p dlci %d", s, dlci); 867 868 cmd.addr = __addr(!s->initiator, dlci); 869 cmd.ctrl = __ctrl(RFCOMM_UA, 1); 870 cmd.len = __len8(0); 871 cmd.fcs = __fcs2((u8 *) &cmd); 872 873 return rfcomm_send_cmd(s, &cmd); 874 } 875 876 static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci) 877 { 878 struct rfcomm_cmd cmd; 879 880 BT_DBG("%p dlci %d", s, dlci); 881 882 cmd.addr = __addr(s->initiator, dlci); 883 cmd.ctrl = __ctrl(RFCOMM_DISC, 1); 884 cmd.len = __len8(0); 885 cmd.fcs = __fcs2((u8 *) &cmd); 886 887 return rfcomm_send_cmd(s, &cmd); 888 } 889 890 static int rfcomm_queue_disc(struct rfcomm_dlc *d) 891 { 892 struct rfcomm_cmd *cmd; 893 struct sk_buff *skb; 894 895 BT_DBG("dlc %p dlci %d", d, d->dlci); 896 897 skb = alloc_skb(sizeof(*cmd), GFP_KERNEL); 898 if (!skb) 899 return -ENOMEM; 900 901 cmd = __skb_put(skb, sizeof(*cmd)); 902 cmd->addr = d->addr; 903 cmd->ctrl = __ctrl(RFCOMM_DISC, 1); 904 cmd->len = __len8(0); 905 cmd->fcs = __fcs2((u8 *) cmd); 906 907 skb_queue_tail(&d->tx_queue, skb); 908 rfcomm_schedule(); 909 return 0; 910 } 911 912 static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci) 913 { 914 struct rfcomm_cmd cmd; 915 916 BT_DBG("%p dlci %d", s, dlci); 917 918 cmd.addr = __addr(!s->initiator, dlci); 919 cmd.ctrl = __ctrl(RFCOMM_DM, 1); 920 cmd.len = __len8(0); 921 cmd.fcs = __fcs2((u8 *) &cmd); 922 923 return rfcomm_send_cmd(s, &cmd); 924 } 925 926 static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type) 927 { 928 struct rfcomm_hdr *hdr; 929 struct rfcomm_mcc *mcc; 930 u8 buf[16], *ptr = buf; 931 932 BT_DBG("%p cr %d type %d", s, cr, type); 933 934 hdr = (void *) ptr; ptr += sizeof(*hdr); 935 hdr->addr = __addr(s->initiator, 0); 936 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 937 hdr->len = __len8(sizeof(*mcc) + 1); 938 939 mcc = (void *) ptr; ptr += sizeof(*mcc); 940 mcc->type = __mcc_type(0, RFCOMM_NSC); 941 mcc->len = __len8(1); 942 943 /* Type that we didn't like */ 944 *ptr = __mcc_type(cr, type); ptr++; 945 946 *ptr = __fcs(buf); ptr++; 947 948 return rfcomm_send_frame(s, buf, ptr - buf); 949 } 950 951 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d) 952 { 953 struct rfcomm_hdr *hdr; 954 struct rfcomm_mcc *mcc; 955 struct rfcomm_pn *pn; 956 u8 buf[16], *ptr = buf; 957 958 BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu); 959 960 hdr = (void *) ptr; ptr += sizeof(*hdr); 961 hdr->addr = __addr(s->initiator, 0); 962 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 963 hdr->len = __len8(sizeof(*mcc) + sizeof(*pn)); 964 965 mcc = (void *) ptr; ptr += sizeof(*mcc); 966 mcc->type = __mcc_type(cr, RFCOMM_PN); 967 mcc->len = __len8(sizeof(*pn)); 968 969 pn = (void *) ptr; ptr += sizeof(*pn); 970 pn->dlci = d->dlci; 971 pn->priority = d->priority; 972 pn->ack_timer = 0; 973 pn->max_retrans = 0; 974 975 if (s->cfc) { 976 pn->flow_ctrl = cr ? 0xf0 : 0xe0; 977 pn->credits = RFCOMM_DEFAULT_CREDITS; 978 } else { 979 pn->flow_ctrl = 0; 980 pn->credits = 0; 981 } 982 983 if (cr && channel_mtu >= 0) 984 pn->mtu = cpu_to_le16(channel_mtu); 985 else 986 pn->mtu = cpu_to_le16(d->mtu); 987 988 *ptr = __fcs(buf); ptr++; 989 990 return rfcomm_send_frame(s, buf, ptr - buf); 991 } 992 993 int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci, 994 u8 bit_rate, u8 data_bits, u8 stop_bits, 995 u8 parity, u8 flow_ctrl_settings, 996 u8 xon_char, u8 xoff_char, u16 param_mask) 997 { 998 struct rfcomm_hdr *hdr; 999 struct rfcomm_mcc *mcc; 1000 struct rfcomm_rpn *rpn; 1001 u8 buf[16], *ptr = buf; 1002 1003 BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x" 1004 " flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x", 1005 s, cr, dlci, bit_rate, data_bits, stop_bits, parity, 1006 flow_ctrl_settings, xon_char, xoff_char, param_mask); 1007 1008 hdr = (void *) ptr; ptr += sizeof(*hdr); 1009 hdr->addr = __addr(s->initiator, 0); 1010 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1011 hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn)); 1012 1013 mcc = (void *) ptr; ptr += sizeof(*mcc); 1014 mcc->type = __mcc_type(cr, RFCOMM_RPN); 1015 mcc->len = __len8(sizeof(*rpn)); 1016 1017 rpn = (void *) ptr; ptr += sizeof(*rpn); 1018 rpn->dlci = __addr(1, dlci); 1019 rpn->bit_rate = bit_rate; 1020 rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity); 1021 rpn->flow_ctrl = flow_ctrl_settings; 1022 rpn->xon_char = xon_char; 1023 rpn->xoff_char = xoff_char; 1024 rpn->param_mask = cpu_to_le16(param_mask); 1025 1026 *ptr = __fcs(buf); ptr++; 1027 1028 return rfcomm_send_frame(s, buf, ptr - buf); 1029 } 1030 1031 int rfcomm_dlc_send_rpn(struct rfcomm_dlc *d, u8 bit_rate, u8 data_bits, 1032 u8 stop_bits, u8 parity, u8 flow_ctrl_settings, 1033 u8 xon_char, u8 xoff_char, u16 param_mask) 1034 { 1035 int err = -ENOTCONN; 1036 1037 rfcomm_lock(); 1038 if (d->session) 1039 err = rfcomm_send_rpn(d->session, 1, d->dlci, bit_rate, 1040 data_bits, stop_bits, parity, 1041 flow_ctrl_settings, xon_char, xoff_char, 1042 param_mask); 1043 rfcomm_unlock(); 1044 1045 return err; 1046 } 1047 1048 static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status) 1049 { 1050 struct rfcomm_hdr *hdr; 1051 struct rfcomm_mcc *mcc; 1052 struct rfcomm_rls *rls; 1053 u8 buf[16], *ptr = buf; 1054 1055 BT_DBG("%p cr %d status 0x%x", s, cr, status); 1056 1057 hdr = (void *) ptr; ptr += sizeof(*hdr); 1058 hdr->addr = __addr(s->initiator, 0); 1059 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1060 hdr->len = __len8(sizeof(*mcc) + sizeof(*rls)); 1061 1062 mcc = (void *) ptr; ptr += sizeof(*mcc); 1063 mcc->type = __mcc_type(cr, RFCOMM_RLS); 1064 mcc->len = __len8(sizeof(*rls)); 1065 1066 rls = (void *) ptr; ptr += sizeof(*rls); 1067 rls->dlci = __addr(1, dlci); 1068 rls->status = status; 1069 1070 *ptr = __fcs(buf); ptr++; 1071 1072 return rfcomm_send_frame(s, buf, ptr - buf); 1073 } 1074 1075 static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig) 1076 { 1077 struct rfcomm_hdr *hdr; 1078 struct rfcomm_mcc *mcc; 1079 struct rfcomm_msc *msc; 1080 u8 buf[16], *ptr = buf; 1081 1082 BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig); 1083 1084 hdr = (void *) ptr; ptr += sizeof(*hdr); 1085 hdr->addr = __addr(s->initiator, 0); 1086 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1087 hdr->len = __len8(sizeof(*mcc) + sizeof(*msc)); 1088 1089 mcc = (void *) ptr; ptr += sizeof(*mcc); 1090 mcc->type = __mcc_type(cr, RFCOMM_MSC); 1091 mcc->len = __len8(sizeof(*msc)); 1092 1093 msc = (void *) ptr; ptr += sizeof(*msc); 1094 msc->dlci = __addr(1, dlci); 1095 msc->v24_sig = v24_sig | 0x01; 1096 1097 *ptr = __fcs(buf); ptr++; 1098 1099 return rfcomm_send_frame(s, buf, ptr - buf); 1100 } 1101 1102 static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr) 1103 { 1104 struct rfcomm_hdr *hdr; 1105 struct rfcomm_mcc *mcc; 1106 u8 buf[16], *ptr = buf; 1107 1108 BT_DBG("%p cr %d", s, cr); 1109 1110 hdr = (void *) ptr; ptr += sizeof(*hdr); 1111 hdr->addr = __addr(s->initiator, 0); 1112 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1113 hdr->len = __len8(sizeof(*mcc)); 1114 1115 mcc = (void *) ptr; ptr += sizeof(*mcc); 1116 mcc->type = __mcc_type(cr, RFCOMM_FCOFF); 1117 mcc->len = __len8(0); 1118 1119 *ptr = __fcs(buf); ptr++; 1120 1121 return rfcomm_send_frame(s, buf, ptr - buf); 1122 } 1123 1124 static int rfcomm_send_fcon(struct rfcomm_session *s, int cr) 1125 { 1126 struct rfcomm_hdr *hdr; 1127 struct rfcomm_mcc *mcc; 1128 u8 buf[16], *ptr = buf; 1129 1130 BT_DBG("%p cr %d", s, cr); 1131 1132 hdr = (void *) ptr; ptr += sizeof(*hdr); 1133 hdr->addr = __addr(s->initiator, 0); 1134 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1135 hdr->len = __len8(sizeof(*mcc)); 1136 1137 mcc = (void *) ptr; ptr += sizeof(*mcc); 1138 mcc->type = __mcc_type(cr, RFCOMM_FCON); 1139 mcc->len = __len8(0); 1140 1141 *ptr = __fcs(buf); ptr++; 1142 1143 return rfcomm_send_frame(s, buf, ptr - buf); 1144 } 1145 1146 static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len) 1147 { 1148 struct socket *sock = s->sock; 1149 struct kvec iv[3]; 1150 struct msghdr msg; 1151 unsigned char hdr[5], crc[1]; 1152 1153 if (len > 125) 1154 return -EINVAL; 1155 1156 BT_DBG("%p cr %d", s, cr); 1157 1158 hdr[0] = __addr(s->initiator, 0); 1159 hdr[1] = __ctrl(RFCOMM_UIH, 0); 1160 hdr[2] = 0x01 | ((len + 2) << 1); 1161 hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2); 1162 hdr[4] = 0x01 | (len << 1); 1163 1164 crc[0] = __fcs(hdr); 1165 1166 iv[0].iov_base = hdr; 1167 iv[0].iov_len = 5; 1168 iv[1].iov_base = pattern; 1169 iv[1].iov_len = len; 1170 iv[2].iov_base = crc; 1171 iv[2].iov_len = 1; 1172 1173 memset(&msg, 0, sizeof(msg)); 1174 1175 return kernel_sendmsg(sock, &msg, iv, 3, 6 + len); 1176 } 1177 1178 static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits) 1179 { 1180 struct rfcomm_hdr *hdr; 1181 u8 buf[16], *ptr = buf; 1182 1183 BT_DBG("%p addr %d credits %d", s, addr, credits); 1184 1185 hdr = (void *) ptr; ptr += sizeof(*hdr); 1186 hdr->addr = addr; 1187 hdr->ctrl = __ctrl(RFCOMM_UIH, 1); 1188 hdr->len = __len8(0); 1189 1190 *ptr = credits; ptr++; 1191 1192 *ptr = __fcs(buf); ptr++; 1193 1194 return rfcomm_send_frame(s, buf, ptr - buf); 1195 } 1196 1197 static void rfcomm_make_uih(struct sk_buff *skb, u8 addr) 1198 { 1199 struct rfcomm_hdr *hdr; 1200 int len = skb->len; 1201 u8 *crc; 1202 1203 if (len > 127) { 1204 hdr = skb_push(skb, 4); 1205 put_unaligned(cpu_to_le16(__len16(len)), (__le16 *) &hdr->len); 1206 } else { 1207 hdr = skb_push(skb, 3); 1208 hdr->len = __len8(len); 1209 } 1210 hdr->addr = addr; 1211 hdr->ctrl = __ctrl(RFCOMM_UIH, 0); 1212 1213 crc = skb_put(skb, 1); 1214 *crc = __fcs((void *) hdr); 1215 } 1216 1217 /* ---- RFCOMM frame reception ---- */ 1218 static struct rfcomm_session *rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci) 1219 { 1220 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); 1221 1222 if (dlci) { 1223 /* Data channel */ 1224 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); 1225 if (!d) { 1226 rfcomm_send_dm(s, dlci); 1227 return s; 1228 } 1229 1230 switch (d->state) { 1231 case BT_CONNECT: 1232 rfcomm_dlc_clear_timer(d); 1233 1234 rfcomm_dlc_lock(d); 1235 d->state = BT_CONNECTED; 1236 d->state_change(d, 0); 1237 rfcomm_dlc_unlock(d); 1238 1239 rfcomm_send_msc(s, 1, dlci, d->v24_sig); 1240 break; 1241 1242 case BT_DISCONN: 1243 d->state = BT_CLOSED; 1244 __rfcomm_dlc_close(d, 0); 1245 1246 if (list_empty(&s->dlcs)) { 1247 s->state = BT_DISCONN; 1248 rfcomm_send_disc(s, 0); 1249 rfcomm_session_clear_timer(s); 1250 } 1251 1252 break; 1253 } 1254 } else { 1255 /* Control channel */ 1256 switch (s->state) { 1257 case BT_CONNECT: 1258 s->state = BT_CONNECTED; 1259 rfcomm_process_connect(s); 1260 break; 1261 1262 case BT_DISCONN: 1263 s = rfcomm_session_close(s, ECONNRESET); 1264 break; 1265 } 1266 } 1267 return s; 1268 } 1269 1270 static struct rfcomm_session *rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci) 1271 { 1272 int err = 0; 1273 1274 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); 1275 1276 if (dlci) { 1277 /* Data DLC */ 1278 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); 1279 if (d) { 1280 if (d->state == BT_CONNECT || d->state == BT_CONFIG) 1281 err = ECONNREFUSED; 1282 else 1283 err = ECONNRESET; 1284 1285 d->state = BT_CLOSED; 1286 __rfcomm_dlc_close(d, err); 1287 } 1288 } else { 1289 if (s->state == BT_CONNECT) 1290 err = ECONNREFUSED; 1291 else 1292 err = ECONNRESET; 1293 1294 s = rfcomm_session_close(s, err); 1295 } 1296 return s; 1297 } 1298 1299 static struct rfcomm_session *rfcomm_recv_disc(struct rfcomm_session *s, 1300 u8 dlci) 1301 { 1302 int err = 0; 1303 1304 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); 1305 1306 if (dlci) { 1307 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); 1308 if (d) { 1309 rfcomm_send_ua(s, dlci); 1310 1311 if (d->state == BT_CONNECT || d->state == BT_CONFIG) 1312 err = ECONNREFUSED; 1313 else 1314 err = ECONNRESET; 1315 1316 d->state = BT_CLOSED; 1317 __rfcomm_dlc_close(d, err); 1318 } else 1319 rfcomm_send_dm(s, dlci); 1320 1321 } else { 1322 rfcomm_send_ua(s, 0); 1323 1324 if (s->state == BT_CONNECT) 1325 err = ECONNREFUSED; 1326 else 1327 err = ECONNRESET; 1328 1329 s = rfcomm_session_close(s, err); 1330 } 1331 return s; 1332 } 1333 1334 void rfcomm_dlc_accept(struct rfcomm_dlc *d) 1335 { 1336 struct sock *sk = d->session->sock->sk; 1337 struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn; 1338 1339 BT_DBG("dlc %p", d); 1340 1341 rfcomm_send_ua(d->session, d->dlci); 1342 1343 rfcomm_dlc_clear_timer(d); 1344 1345 rfcomm_dlc_lock(d); 1346 d->state = BT_CONNECTED; 1347 d->state_change(d, 0); 1348 rfcomm_dlc_unlock(d); 1349 1350 if (d->role_switch) 1351 hci_conn_switch_role(conn->hcon, 0x00); 1352 1353 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); 1354 } 1355 1356 static void rfcomm_check_accept(struct rfcomm_dlc *d) 1357 { 1358 if (rfcomm_check_security(d)) { 1359 if (d->defer_setup) { 1360 set_bit(RFCOMM_DEFER_SETUP, &d->flags); 1361 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); 1362 1363 rfcomm_dlc_lock(d); 1364 d->state = BT_CONNECT2; 1365 d->state_change(d, 0); 1366 rfcomm_dlc_unlock(d); 1367 } else 1368 rfcomm_dlc_accept(d); 1369 } else { 1370 set_bit(RFCOMM_AUTH_PENDING, &d->flags); 1371 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); 1372 } 1373 } 1374 1375 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci) 1376 { 1377 struct rfcomm_dlc *d; 1378 u8 channel; 1379 1380 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); 1381 1382 if (!dlci) { 1383 rfcomm_send_ua(s, 0); 1384 1385 if (s->state == BT_OPEN) { 1386 s->state = BT_CONNECTED; 1387 rfcomm_process_connect(s); 1388 } 1389 return 0; 1390 } 1391 1392 /* Check if DLC exists */ 1393 d = rfcomm_dlc_get(s, dlci); 1394 if (d) { 1395 if (d->state == BT_OPEN) { 1396 /* DLC was previously opened by PN request */ 1397 rfcomm_check_accept(d); 1398 } 1399 return 0; 1400 } 1401 1402 /* Notify socket layer about incoming connection */ 1403 channel = __srv_channel(dlci); 1404 if (rfcomm_connect_ind(s, channel, &d)) { 1405 d->dlci = dlci; 1406 d->addr = __addr(s->initiator, dlci); 1407 rfcomm_dlc_link(s, d); 1408 1409 rfcomm_check_accept(d); 1410 } else { 1411 rfcomm_send_dm(s, dlci); 1412 } 1413 1414 return 0; 1415 } 1416 1417 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn) 1418 { 1419 struct rfcomm_session *s = d->session; 1420 1421 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d", 1422 d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits); 1423 1424 if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) || 1425 pn->flow_ctrl == 0xe0) { 1426 d->cfc = RFCOMM_CFC_ENABLED; 1427 d->tx_credits = pn->credits; 1428 } else { 1429 d->cfc = RFCOMM_CFC_DISABLED; 1430 set_bit(RFCOMM_TX_THROTTLED, &d->flags); 1431 } 1432 1433 if (s->cfc == RFCOMM_CFC_UNKNOWN) 1434 s->cfc = d->cfc; 1435 1436 d->priority = pn->priority; 1437 1438 d->mtu = __le16_to_cpu(pn->mtu); 1439 1440 if (cr && d->mtu > s->mtu) 1441 d->mtu = s->mtu; 1442 1443 return 0; 1444 } 1445 1446 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb) 1447 { 1448 struct rfcomm_pn *pn; 1449 struct rfcomm_dlc *d; 1450 u8 dlci; 1451 1452 pn = skb_pull_data(skb, sizeof(*pn)); 1453 if (!pn) 1454 return -EILSEQ; 1455 1456 dlci = pn->dlci; 1457 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); 1458 1459 if (!dlci) 1460 return 0; 1461 1462 d = rfcomm_dlc_get(s, dlci); 1463 if (d) { 1464 if (cr) { 1465 /* PN request */ 1466 rfcomm_apply_pn(d, cr, pn); 1467 rfcomm_send_pn(s, 0, d); 1468 } else { 1469 /* PN response */ 1470 switch (d->state) { 1471 case BT_CONFIG: 1472 rfcomm_apply_pn(d, cr, pn); 1473 1474 d->state = BT_CONNECT; 1475 rfcomm_send_sabm(s, d->dlci); 1476 break; 1477 } 1478 } 1479 } else { 1480 u8 channel = __srv_channel(dlci); 1481 1482 if (!cr) 1483 return 0; 1484 1485 /* PN request for non existing DLC. 1486 * Assume incoming connection. */ 1487 if (rfcomm_connect_ind(s, channel, &d)) { 1488 d->dlci = dlci; 1489 d->addr = __addr(s->initiator, dlci); 1490 rfcomm_dlc_link(s, d); 1491 1492 rfcomm_apply_pn(d, cr, pn); 1493 1494 d->state = BT_OPEN; 1495 rfcomm_send_pn(s, 0, d); 1496 } else { 1497 rfcomm_send_dm(s, dlci); 1498 } 1499 } 1500 return 0; 1501 } 1502 1503 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb) 1504 { 1505 struct rfcomm_rpn *rpn; 1506 u8 dlci; 1507 1508 u8 bit_rate = 0; 1509 u8 data_bits = 0; 1510 u8 stop_bits = 0; 1511 u8 parity = 0; 1512 u8 flow_ctrl = 0; 1513 u8 xon_char = 0; 1514 u8 xoff_char = 0; 1515 u16 rpn_mask = RFCOMM_RPN_PM_ALL; 1516 1517 if (len == 1) { 1518 rpn = skb_pull_data(skb, 1); 1519 if (!rpn) 1520 return -EILSEQ; 1521 1522 dlci = __get_dlci(rpn->dlci); 1523 1524 if (!cr) 1525 return 0; 1526 1527 bit_rate = RFCOMM_RPN_BR_9600; 1528 data_bits = RFCOMM_RPN_DATA_8; 1529 stop_bits = RFCOMM_RPN_STOP_1; 1530 parity = RFCOMM_RPN_PARITY_NONE; 1531 flow_ctrl = RFCOMM_RPN_FLOW_NONE; 1532 xon_char = RFCOMM_RPN_XON_CHAR; 1533 xoff_char = RFCOMM_RPN_XOFF_CHAR; 1534 goto rpn_out; 1535 } 1536 1537 rpn = skb_pull_data(skb, sizeof(*rpn)); 1538 if (!rpn) 1539 return -EILSEQ; 1540 1541 dlci = __get_dlci(rpn->dlci); 1542 1543 BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x", 1544 dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl, 1545 rpn->xon_char, rpn->xoff_char, rpn->param_mask); 1546 1547 if (!cr) 1548 return 0; 1549 1550 /* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit, 1551 * no parity, no flow control lines, normal XON/XOFF chars */ 1552 1553 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) { 1554 bit_rate = rpn->bit_rate; 1555 if (bit_rate > RFCOMM_RPN_BR_230400) { 1556 BT_DBG("RPN bit rate mismatch 0x%x", bit_rate); 1557 bit_rate = RFCOMM_RPN_BR_9600; 1558 rpn_mask ^= RFCOMM_RPN_PM_BITRATE; 1559 } 1560 } 1561 1562 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) { 1563 data_bits = __get_rpn_data_bits(rpn->line_settings); 1564 if (data_bits != RFCOMM_RPN_DATA_8) { 1565 BT_DBG("RPN data bits mismatch 0x%x", data_bits); 1566 data_bits = RFCOMM_RPN_DATA_8; 1567 rpn_mask ^= RFCOMM_RPN_PM_DATA; 1568 } 1569 } 1570 1571 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) { 1572 stop_bits = __get_rpn_stop_bits(rpn->line_settings); 1573 if (stop_bits != RFCOMM_RPN_STOP_1) { 1574 BT_DBG("RPN stop bits mismatch 0x%x", stop_bits); 1575 stop_bits = RFCOMM_RPN_STOP_1; 1576 rpn_mask ^= RFCOMM_RPN_PM_STOP; 1577 } 1578 } 1579 1580 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) { 1581 parity = __get_rpn_parity(rpn->line_settings); 1582 if (parity != RFCOMM_RPN_PARITY_NONE) { 1583 BT_DBG("RPN parity mismatch 0x%x", parity); 1584 parity = RFCOMM_RPN_PARITY_NONE; 1585 rpn_mask ^= RFCOMM_RPN_PM_PARITY; 1586 } 1587 } 1588 1589 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) { 1590 flow_ctrl = rpn->flow_ctrl; 1591 if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) { 1592 BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl); 1593 flow_ctrl = RFCOMM_RPN_FLOW_NONE; 1594 rpn_mask ^= RFCOMM_RPN_PM_FLOW; 1595 } 1596 } 1597 1598 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) { 1599 xon_char = rpn->xon_char; 1600 if (xon_char != RFCOMM_RPN_XON_CHAR) { 1601 BT_DBG("RPN XON char mismatch 0x%x", xon_char); 1602 xon_char = RFCOMM_RPN_XON_CHAR; 1603 rpn_mask ^= RFCOMM_RPN_PM_XON; 1604 } 1605 } 1606 1607 if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) { 1608 xoff_char = rpn->xoff_char; 1609 if (xoff_char != RFCOMM_RPN_XOFF_CHAR) { 1610 BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char); 1611 xoff_char = RFCOMM_RPN_XOFF_CHAR; 1612 rpn_mask ^= RFCOMM_RPN_PM_XOFF; 1613 } 1614 } 1615 1616 rpn_out: 1617 rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits, 1618 parity, flow_ctrl, xon_char, xoff_char, rpn_mask); 1619 1620 return 0; 1621 } 1622 1623 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb) 1624 { 1625 struct rfcomm_rls *rls; 1626 u8 dlci; 1627 1628 rls = skb_pull_data(skb, sizeof(*rls)); 1629 if (!rls) 1630 return -EILSEQ; 1631 1632 dlci = __get_dlci(rls->dlci); 1633 BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status); 1634 1635 if (!cr) 1636 return 0; 1637 1638 /* We should probably do something with this information here. But 1639 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's 1640 * mandatory to recognise and respond to RLS */ 1641 1642 rfcomm_send_rls(s, 0, dlci, rls->status); 1643 1644 return 0; 1645 } 1646 1647 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb) 1648 { 1649 struct rfcomm_msc *msc; 1650 struct rfcomm_dlc *d; 1651 u8 dlci; 1652 1653 msc = skb_pull_data(skb, sizeof(*msc)); 1654 if (!msc) 1655 return -EILSEQ; 1656 1657 dlci = __get_dlci(msc->dlci); 1658 BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig); 1659 1660 d = rfcomm_dlc_get(s, dlci); 1661 if (!d) 1662 return 0; 1663 1664 if (cr) { 1665 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc) 1666 set_bit(RFCOMM_TX_THROTTLED, &d->flags); 1667 else 1668 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); 1669 1670 rfcomm_dlc_lock(d); 1671 1672 d->remote_v24_sig = msc->v24_sig; 1673 1674 if (d->modem_status) 1675 d->modem_status(d, msc->v24_sig); 1676 1677 rfcomm_dlc_unlock(d); 1678 1679 rfcomm_send_msc(s, 0, dlci, msc->v24_sig); 1680 1681 d->mscex |= RFCOMM_MSCEX_RX; 1682 } else 1683 d->mscex |= RFCOMM_MSCEX_TX; 1684 1685 return 0; 1686 } 1687 1688 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb) 1689 { 1690 struct rfcomm_mcc *mcc; 1691 u8 type, cr, len; 1692 1693 mcc = skb_pull_data(skb, sizeof(*mcc)); 1694 if (!mcc) 1695 return -EILSEQ; 1696 1697 cr = __test_cr(mcc->type); 1698 type = __get_mcc_type(mcc->type); 1699 len = __get_mcc_len(mcc->len); 1700 1701 BT_DBG("%p type 0x%x cr %d", s, type, cr); 1702 1703 switch (type) { 1704 case RFCOMM_PN: 1705 rfcomm_recv_pn(s, cr, skb); 1706 break; 1707 1708 case RFCOMM_RPN: 1709 rfcomm_recv_rpn(s, cr, len, skb); 1710 break; 1711 1712 case RFCOMM_RLS: 1713 rfcomm_recv_rls(s, cr, skb); 1714 break; 1715 1716 case RFCOMM_MSC: 1717 rfcomm_recv_msc(s, cr, skb); 1718 break; 1719 1720 case RFCOMM_FCOFF: 1721 if (cr) { 1722 set_bit(RFCOMM_TX_THROTTLED, &s->flags); 1723 rfcomm_send_fcoff(s, 0); 1724 } 1725 break; 1726 1727 case RFCOMM_FCON: 1728 if (cr) { 1729 clear_bit(RFCOMM_TX_THROTTLED, &s->flags); 1730 rfcomm_send_fcon(s, 0); 1731 } 1732 break; 1733 1734 case RFCOMM_TEST: 1735 if (cr) 1736 rfcomm_send_test(s, 0, skb->data, skb->len); 1737 break; 1738 1739 case RFCOMM_NSC: 1740 break; 1741 1742 default: 1743 BT_ERR("Unknown control type 0x%02x", type); 1744 rfcomm_send_nsc(s, cr, type); 1745 break; 1746 } 1747 return 0; 1748 } 1749 1750 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb) 1751 { 1752 struct rfcomm_dlc *d; 1753 1754 BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf); 1755 1756 d = rfcomm_dlc_get(s, dlci); 1757 if (!d) { 1758 rfcomm_send_dm(s, dlci); 1759 goto drop; 1760 } 1761 1762 if (pf && d->cfc) { 1763 u8 *credits = skb_pull_data(skb, 1); 1764 1765 if (!credits) 1766 goto drop; 1767 1768 d->tx_credits += *credits; 1769 if (d->tx_credits) 1770 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); 1771 } 1772 1773 if (skb->len && d->state == BT_CONNECTED) { 1774 rfcomm_dlc_lock(d); 1775 d->rx_credits--; 1776 d->data_ready(d, skb); 1777 rfcomm_dlc_unlock(d); 1778 return 0; 1779 } 1780 1781 drop: 1782 kfree_skb(skb); 1783 return 0; 1784 } 1785 1786 static struct rfcomm_session *rfcomm_recv_frame(struct rfcomm_session *s, 1787 struct sk_buff *skb) 1788 { 1789 struct rfcomm_hdr *hdr = (void *) skb->data; 1790 u8 type, dlci, fcs; 1791 1792 if (!s) { 1793 /* no session, so free socket data */ 1794 kfree_skb(skb); 1795 return s; 1796 } 1797 1798 if (skb->len < sizeof(*hdr) + 1) { 1799 kfree_skb(skb); 1800 return s; 1801 } 1802 1803 dlci = __get_dlci(hdr->addr); 1804 type = __get_type(hdr->ctrl); 1805 1806 /* Trim FCS */ 1807 skb->len--; skb->tail--; 1808 fcs = *(u8 *)skb_tail_pointer(skb); 1809 1810 if (__check_fcs(skb->data, type, fcs)) { 1811 BT_ERR("bad checksum in packet"); 1812 kfree_skb(skb); 1813 return s; 1814 } 1815 1816 if (__test_ea(hdr->len)) 1817 skb_pull(skb, 3); 1818 else 1819 skb_pull(skb, 4); 1820 1821 switch (type) { 1822 case RFCOMM_SABM: 1823 if (__test_pf(hdr->ctrl)) 1824 rfcomm_recv_sabm(s, dlci); 1825 break; 1826 1827 case RFCOMM_DISC: 1828 if (__test_pf(hdr->ctrl)) 1829 s = rfcomm_recv_disc(s, dlci); 1830 break; 1831 1832 case RFCOMM_UA: 1833 if (__test_pf(hdr->ctrl)) 1834 s = rfcomm_recv_ua(s, dlci); 1835 break; 1836 1837 case RFCOMM_DM: 1838 s = rfcomm_recv_dm(s, dlci); 1839 break; 1840 1841 case RFCOMM_UIH: 1842 if (dlci) { 1843 rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb); 1844 return s; 1845 } 1846 rfcomm_recv_mcc(s, skb); 1847 break; 1848 1849 default: 1850 BT_ERR("Unknown packet type 0x%02x", type); 1851 break; 1852 } 1853 kfree_skb(skb); 1854 return s; 1855 } 1856 1857 /* ---- Connection and data processing ---- */ 1858 1859 static void rfcomm_process_connect(struct rfcomm_session *s) 1860 { 1861 struct rfcomm_dlc *d, *n; 1862 1863 BT_DBG("session %p state %ld", s, s->state); 1864 1865 list_for_each_entry_safe(d, n, &s->dlcs, list) { 1866 if (d->state == BT_CONFIG) { 1867 d->mtu = s->mtu; 1868 if (rfcomm_check_security(d)) { 1869 rfcomm_send_pn(s, 1, d); 1870 } else { 1871 set_bit(RFCOMM_AUTH_PENDING, &d->flags); 1872 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); 1873 } 1874 } 1875 } 1876 } 1877 1878 /* Send data queued for the DLC. 1879 * Return number of frames left in the queue. 1880 */ 1881 static int rfcomm_process_tx(struct rfcomm_dlc *d) 1882 { 1883 struct sk_buff *skb; 1884 int err; 1885 1886 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d", 1887 d, d->state, d->cfc, d->rx_credits, d->tx_credits); 1888 1889 /* Send pending MSC */ 1890 if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags)) 1891 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); 1892 1893 if (d->cfc) { 1894 /* CFC enabled. 1895 * Give them some credits */ 1896 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) && 1897 d->rx_credits <= (d->cfc >> 2)) { 1898 rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits); 1899 d->rx_credits = d->cfc; 1900 } 1901 } else { 1902 /* CFC disabled. 1903 * Give ourselves some credits */ 1904 d->tx_credits = 5; 1905 } 1906 1907 if (test_bit(RFCOMM_TX_THROTTLED, &d->flags)) 1908 return skb_queue_len(&d->tx_queue); 1909 1910 while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) { 1911 err = rfcomm_send_frame(d->session, skb->data, skb->len); 1912 if (err < 0) { 1913 skb_queue_head(&d->tx_queue, skb); 1914 break; 1915 } 1916 kfree_skb(skb); 1917 d->tx_credits--; 1918 } 1919 1920 if (d->cfc && !d->tx_credits) { 1921 /* We're out of TX credits. 1922 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */ 1923 set_bit(RFCOMM_TX_THROTTLED, &d->flags); 1924 } 1925 1926 return skb_queue_len(&d->tx_queue); 1927 } 1928 1929 static void rfcomm_process_dlcs(struct rfcomm_session *s) 1930 { 1931 struct rfcomm_dlc *d, *n; 1932 1933 BT_DBG("session %p state %ld", s, s->state); 1934 1935 list_for_each_entry_safe(d, n, &s->dlcs, list) { 1936 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) { 1937 __rfcomm_dlc_close(d, ETIMEDOUT); 1938 continue; 1939 } 1940 1941 if (test_bit(RFCOMM_ENC_DROP, &d->flags)) { 1942 __rfcomm_dlc_close(d, ECONNREFUSED); 1943 continue; 1944 } 1945 1946 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) { 1947 rfcomm_dlc_clear_timer(d); 1948 if (d->out) { 1949 rfcomm_send_pn(s, 1, d); 1950 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); 1951 } else { 1952 if (d->defer_setup) { 1953 set_bit(RFCOMM_DEFER_SETUP, &d->flags); 1954 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); 1955 1956 rfcomm_dlc_lock(d); 1957 d->state = BT_CONNECT2; 1958 d->state_change(d, 0); 1959 rfcomm_dlc_unlock(d); 1960 } else 1961 rfcomm_dlc_accept(d); 1962 } 1963 continue; 1964 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) { 1965 rfcomm_dlc_clear_timer(d); 1966 if (!d->out) 1967 rfcomm_send_dm(s, d->dlci); 1968 else 1969 d->state = BT_CLOSED; 1970 __rfcomm_dlc_close(d, ECONNREFUSED); 1971 continue; 1972 } 1973 1974 if (test_bit(RFCOMM_SEC_PENDING, &d->flags)) 1975 continue; 1976 1977 if (test_bit(RFCOMM_TX_THROTTLED, &s->flags)) 1978 continue; 1979 1980 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) && 1981 d->mscex == RFCOMM_MSCEX_OK) 1982 rfcomm_process_tx(d); 1983 } 1984 } 1985 1986 static struct rfcomm_session *rfcomm_process_rx(struct rfcomm_session *s) 1987 { 1988 struct socket *sock = s->sock; 1989 struct sock *sk = sock->sk; 1990 struct sk_buff *skb; 1991 1992 BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue)); 1993 1994 /* Get data directly from socket receive queue without copying it. */ 1995 while ((skb = skb_dequeue(&sk->sk_receive_queue))) { 1996 skb_orphan(skb); 1997 if (!skb_linearize(skb) && sk->sk_state != BT_CLOSED) { 1998 s = rfcomm_recv_frame(s, skb); 1999 if (!s) 2000 break; 2001 } else { 2002 kfree_skb(skb); 2003 } 2004 } 2005 2006 if (s && (sk->sk_state == BT_CLOSED)) 2007 s = rfcomm_session_close(s, sk->sk_err); 2008 2009 return s; 2010 } 2011 2012 static void rfcomm_accept_connection(struct rfcomm_session *s) 2013 { 2014 struct socket *sock = s->sock, *nsock; 2015 int err; 2016 2017 /* Fast check for a new connection. 2018 * Avoids unnecessary socket allocations. 2019 */ 2020 if (list_empty(&bt_sk(sock->sk)->accept_q)) 2021 return; 2022 2023 BT_DBG("session %p", s); 2024 2025 err = kernel_accept(sock, &nsock, O_NONBLOCK); 2026 if (err < 0) 2027 return; 2028 2029 /* Set our callbacks */ 2030 nsock->sk->sk_data_ready = rfcomm_l2data_ready; 2031 nsock->sk->sk_state_change = rfcomm_l2state_change; 2032 2033 s = rfcomm_session_add(nsock, BT_OPEN); 2034 if (s) { 2035 /* We should adjust MTU on incoming sessions. 2036 * L2CAP MTU minus UIH header and FCS. */ 2037 s->mtu = min(l2cap_pi(nsock->sk)->chan->omtu, 2038 l2cap_pi(nsock->sk)->chan->imtu) - 5; 2039 2040 rfcomm_schedule(); 2041 } else 2042 sock_release(nsock); 2043 } 2044 2045 static struct rfcomm_session *rfcomm_check_connection(struct rfcomm_session *s) 2046 { 2047 struct sock *sk = s->sock->sk; 2048 2049 BT_DBG("%p state %ld", s, s->state); 2050 2051 switch (sk->sk_state) { 2052 case BT_CONNECTED: 2053 s->state = BT_CONNECT; 2054 2055 /* We can adjust MTU on outgoing sessions. 2056 * L2CAP MTU minus UIH header and FCS. */ 2057 s->mtu = min(l2cap_pi(sk)->chan->omtu, l2cap_pi(sk)->chan->imtu) - 5; 2058 2059 rfcomm_send_sabm(s, 0); 2060 break; 2061 2062 case BT_CLOSED: 2063 s = rfcomm_session_close(s, sk->sk_err); 2064 break; 2065 } 2066 return s; 2067 } 2068 2069 static void rfcomm_process_sessions(void) 2070 { 2071 struct rfcomm_session *s, *n; 2072 2073 rfcomm_lock(); 2074 2075 list_for_each_entry_safe(s, n, &session_list, list) { 2076 if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) { 2077 s->state = BT_DISCONN; 2078 rfcomm_send_disc(s, 0); 2079 continue; 2080 } 2081 2082 switch (s->state) { 2083 case BT_LISTEN: 2084 rfcomm_accept_connection(s); 2085 continue; 2086 2087 case BT_BOUND: 2088 s = rfcomm_check_connection(s); 2089 break; 2090 2091 default: 2092 s = rfcomm_process_rx(s); 2093 break; 2094 } 2095 2096 if (s) 2097 rfcomm_process_dlcs(s); 2098 } 2099 2100 rfcomm_unlock(); 2101 } 2102 2103 static int rfcomm_add_listener(bdaddr_t *ba) 2104 { 2105 struct sockaddr_l2 addr; 2106 struct socket *sock; 2107 struct sock *sk; 2108 struct rfcomm_session *s; 2109 int err = 0; 2110 2111 /* Create socket */ 2112 err = rfcomm_l2sock_create(&sock); 2113 if (err < 0) { 2114 BT_ERR("Create socket failed %d", err); 2115 return err; 2116 } 2117 2118 /* Bind socket */ 2119 bacpy(&addr.l2_bdaddr, ba); 2120 addr.l2_family = AF_BLUETOOTH; 2121 addr.l2_psm = cpu_to_le16(L2CAP_PSM_RFCOMM); 2122 addr.l2_cid = 0; 2123 addr.l2_bdaddr_type = BDADDR_BREDR; 2124 err = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr)); 2125 if (err < 0) { 2126 BT_ERR("Bind failed %d", err); 2127 goto failed; 2128 } 2129 2130 /* Set L2CAP options */ 2131 sk = sock->sk; 2132 lock_sock(sk); 2133 /* Set MTU to 0 so L2CAP can auto select the MTU */ 2134 l2cap_pi(sk)->chan->imtu = 0; 2135 release_sock(sk); 2136 2137 /* Start listening on the socket */ 2138 err = kernel_listen(sock, 10); 2139 if (err) { 2140 BT_ERR("Listen failed %d", err); 2141 goto failed; 2142 } 2143 2144 /* Add listening session */ 2145 s = rfcomm_session_add(sock, BT_LISTEN); 2146 if (!s) { 2147 err = -ENOMEM; 2148 goto failed; 2149 } 2150 2151 return 0; 2152 failed: 2153 sock_release(sock); 2154 return err; 2155 } 2156 2157 static void rfcomm_kill_listener(void) 2158 { 2159 struct rfcomm_session *s, *n; 2160 2161 BT_DBG(""); 2162 2163 list_for_each_entry_safe(s, n, &session_list, list) 2164 rfcomm_session_del(s); 2165 } 2166 2167 static int rfcomm_run(void *unused) 2168 { 2169 DEFINE_WAIT_FUNC(wait, woken_wake_function); 2170 BT_DBG(""); 2171 2172 set_user_nice(current, -10); 2173 2174 rfcomm_add_listener(BDADDR_ANY); 2175 2176 add_wait_queue(&rfcomm_wq, &wait); 2177 while (!kthread_should_stop()) { 2178 2179 /* Process stuff */ 2180 rfcomm_process_sessions(); 2181 2182 wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); 2183 } 2184 remove_wait_queue(&rfcomm_wq, &wait); 2185 2186 rfcomm_kill_listener(); 2187 2188 return 0; 2189 } 2190 2191 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt) 2192 { 2193 struct rfcomm_session *s; 2194 struct rfcomm_dlc *d, *n; 2195 2196 BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt); 2197 2198 s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst); 2199 if (!s) 2200 return; 2201 2202 list_for_each_entry_safe(d, n, &s->dlcs, list) { 2203 if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) { 2204 rfcomm_dlc_clear_timer(d); 2205 if (status || encrypt == 0x00) { 2206 set_bit(RFCOMM_ENC_DROP, &d->flags); 2207 continue; 2208 } 2209 } 2210 2211 if (d->state == BT_CONNECTED && !status && encrypt == 0x00) { 2212 if (d->sec_level == BT_SECURITY_MEDIUM) { 2213 set_bit(RFCOMM_SEC_PENDING, &d->flags); 2214 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); 2215 continue; 2216 } else if (d->sec_level == BT_SECURITY_HIGH || 2217 d->sec_level == BT_SECURITY_FIPS) { 2218 set_bit(RFCOMM_ENC_DROP, &d->flags); 2219 continue; 2220 } 2221 } 2222 2223 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags)) 2224 continue; 2225 2226 if (!status && hci_conn_check_secure(conn, d->sec_level)) 2227 set_bit(RFCOMM_AUTH_ACCEPT, &d->flags); 2228 else 2229 set_bit(RFCOMM_AUTH_REJECT, &d->flags); 2230 } 2231 2232 rfcomm_schedule(); 2233 } 2234 2235 static struct hci_cb rfcomm_cb = { 2236 .name = "RFCOMM", 2237 .security_cfm = rfcomm_security_cfm 2238 }; 2239 2240 static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x) 2241 { 2242 struct rfcomm_session *s; 2243 2244 rfcomm_lock(); 2245 2246 list_for_each_entry(s, &session_list, list) { 2247 struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan; 2248 struct rfcomm_dlc *d; 2249 list_for_each_entry(d, &s->dlcs, list) { 2250 seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n", 2251 &chan->src, &chan->dst, 2252 d->state, d->dlci, d->mtu, 2253 d->rx_credits, d->tx_credits); 2254 } 2255 } 2256 2257 rfcomm_unlock(); 2258 2259 return 0; 2260 } 2261 2262 DEFINE_SHOW_ATTRIBUTE(rfcomm_dlc_debugfs); 2263 2264 static struct dentry *rfcomm_dlc_debugfs; 2265 2266 /* ---- Initialization ---- */ 2267 static int __init rfcomm_init(void) 2268 { 2269 int err; 2270 2271 hci_register_cb(&rfcomm_cb); 2272 2273 rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd"); 2274 if (IS_ERR(rfcomm_thread)) { 2275 err = PTR_ERR(rfcomm_thread); 2276 goto unregister; 2277 } 2278 2279 err = rfcomm_init_ttys(); 2280 if (err < 0) 2281 goto stop; 2282 2283 err = rfcomm_init_sockets(); 2284 if (err < 0) 2285 goto cleanup; 2286 2287 BT_INFO("RFCOMM ver %s", VERSION); 2288 2289 if (IS_ERR_OR_NULL(bt_debugfs)) 2290 return 0; 2291 2292 rfcomm_dlc_debugfs = debugfs_create_file("rfcomm_dlc", 0444, 2293 bt_debugfs, NULL, 2294 &rfcomm_dlc_debugfs_fops); 2295 2296 return 0; 2297 2298 cleanup: 2299 rfcomm_cleanup_ttys(); 2300 2301 stop: 2302 kthread_stop(rfcomm_thread); 2303 2304 unregister: 2305 hci_unregister_cb(&rfcomm_cb); 2306 2307 return err; 2308 } 2309 2310 static void __exit rfcomm_exit(void) 2311 { 2312 debugfs_remove(rfcomm_dlc_debugfs); 2313 2314 hci_unregister_cb(&rfcomm_cb); 2315 2316 kthread_stop(rfcomm_thread); 2317 2318 rfcomm_cleanup_ttys(); 2319 2320 rfcomm_cleanup_sockets(); 2321 } 2322 2323 module_init(rfcomm_init); 2324 module_exit(rfcomm_exit); 2325 2326 module_param(disable_cfc, bool, 0644); 2327 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control"); 2328 2329 module_param(channel_mtu, int, 0644); 2330 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel"); 2331 2332 module_param(l2cap_ertm, bool, 0644); 2333 MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection"); 2334 2335 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); 2336 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION); 2337 MODULE_VERSION(VERSION); 2338 MODULE_LICENSE("GPL"); 2339 MODULE_ALIAS("bt-proto-3"); 2340