xref: /linux/net/bluetooth/rfcomm/core.c (revision 85cdaca6970028bf6f544c355c90035586836ddf)
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