xref: /linux/net/bluetooth/rfcomm/core.c (revision 1b78070aaef63512688aebfbc82365ef9d6660f1)
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 /* Must be called with rfcomm_mutex held, so that the session cannot be
1335  * unlinked from under us.
1336  */
1337 static void __rfcomm_dlc_accept(struct rfcomm_dlc *d)
1338 {
1339 	struct sock *sk = d->session->sock->sk;
1340 	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1341 
1342 	BT_DBG("dlc %p", d);
1343 
1344 	rfcomm_send_ua(d->session, d->dlci);
1345 
1346 	rfcomm_dlc_clear_timer(d);
1347 
1348 	rfcomm_dlc_lock(d);
1349 	d->state = BT_CONNECTED;
1350 	d->state_change(d, 0);
1351 	rfcomm_dlc_unlock(d);
1352 
1353 	if (d->role_switch)
1354 		hci_conn_switch_role(conn->hcon, 0x00);
1355 
1356 	rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1357 }
1358 
1359 void rfcomm_dlc_accept(struct rfcomm_dlc *d)
1360 {
1361 	rfcomm_lock();
1362 
1363 	/* rfcomm_recv_disc() sets the dlc state to BT_CLOSED before calling
1364 	 * __rfcomm_dlc_close(), so the RFCOMM_DEFER_SETUP handshake there is
1365 	 * skipped and the session can already be unlinked by the time the
1366 	 * deferred accept runs from rfcomm_sock_recvmsg().
1367 	 */
1368 	if (d->session)
1369 		__rfcomm_dlc_accept(d);
1370 
1371 	rfcomm_unlock();
1372 }
1373 
1374 static void rfcomm_check_accept(struct rfcomm_dlc *d)
1375 {
1376 	if (rfcomm_check_security(d)) {
1377 		if (d->defer_setup) {
1378 			set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1379 			rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1380 
1381 			rfcomm_dlc_lock(d);
1382 			d->state = BT_CONNECT2;
1383 			d->state_change(d, 0);
1384 			rfcomm_dlc_unlock(d);
1385 		} else
1386 			__rfcomm_dlc_accept(d);
1387 	} else {
1388 		set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1389 		rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1390 	}
1391 }
1392 
1393 static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
1394 {
1395 	struct rfcomm_dlc *d;
1396 	u8 channel;
1397 
1398 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1399 
1400 	if (!dlci) {
1401 		rfcomm_send_ua(s, 0);
1402 
1403 		if (s->state == BT_OPEN) {
1404 			s->state = BT_CONNECTED;
1405 			rfcomm_process_connect(s);
1406 		}
1407 		return 0;
1408 	}
1409 
1410 	/* Check if DLC exists */
1411 	d = rfcomm_dlc_get(s, dlci);
1412 	if (d) {
1413 		if (d->state == BT_OPEN) {
1414 			/* DLC was previously opened by PN request */
1415 			rfcomm_check_accept(d);
1416 		}
1417 		return 0;
1418 	}
1419 
1420 	/* Notify socket layer about incoming connection */
1421 	channel = __srv_channel(dlci);
1422 	if (rfcomm_connect_ind(s, channel, &d)) {
1423 		d->dlci = dlci;
1424 		d->addr = __addr(s->initiator, dlci);
1425 		rfcomm_dlc_link(s, d);
1426 
1427 		rfcomm_check_accept(d);
1428 	} else {
1429 		rfcomm_send_dm(s, dlci);
1430 	}
1431 
1432 	return 0;
1433 }
1434 
1435 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
1436 {
1437 	struct rfcomm_session *s = d->session;
1438 
1439 	BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
1440 			d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
1441 
1442 	if ((pn->flow_ctrl == 0xf0 && s->cfc != RFCOMM_CFC_DISABLED) ||
1443 						pn->flow_ctrl == 0xe0) {
1444 		d->cfc = RFCOMM_CFC_ENABLED;
1445 		d->tx_credits = pn->credits;
1446 	} else {
1447 		d->cfc = RFCOMM_CFC_DISABLED;
1448 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1449 	}
1450 
1451 	if (s->cfc == RFCOMM_CFC_UNKNOWN)
1452 		s->cfc = d->cfc;
1453 
1454 	d->priority = pn->priority;
1455 
1456 	d->mtu = __le16_to_cpu(pn->mtu);
1457 
1458 	/* MTU 0 causes an infinite loop when fragmenting in sendmsg */
1459 	if (!d->mtu)
1460 		d->mtu = RFCOMM_DEFAULT_MTU;
1461 
1462 	if (cr && d->mtu > s->mtu)
1463 		d->mtu = s->mtu;
1464 
1465 	return 0;
1466 }
1467 
1468 static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1469 {
1470 	struct rfcomm_pn *pn;
1471 	struct rfcomm_dlc *d;
1472 	u8 dlci;
1473 
1474 	pn = skb_pull_data(skb, sizeof(*pn));
1475 	if (!pn)
1476 		return -EILSEQ;
1477 
1478 	dlci = pn->dlci;
1479 	BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
1480 
1481 	if (!dlci)
1482 		return 0;
1483 
1484 	d = rfcomm_dlc_get(s, dlci);
1485 	if (d) {
1486 		if (cr) {
1487 			/* PN request */
1488 			rfcomm_apply_pn(d, cr, pn);
1489 			rfcomm_send_pn(s, 0, d);
1490 		} else {
1491 			/* PN response */
1492 			switch (d->state) {
1493 			case BT_CONFIG:
1494 				rfcomm_apply_pn(d, cr, pn);
1495 
1496 				d->state = BT_CONNECT;
1497 				rfcomm_send_sabm(s, d->dlci);
1498 				break;
1499 			}
1500 		}
1501 	} else {
1502 		u8 channel = __srv_channel(dlci);
1503 
1504 		if (!cr)
1505 			return 0;
1506 
1507 		/* PN request for non existing DLC.
1508 		 * Assume incoming connection. */
1509 		if (rfcomm_connect_ind(s, channel, &d)) {
1510 			d->dlci = dlci;
1511 			d->addr = __addr(s->initiator, dlci);
1512 			rfcomm_dlc_link(s, d);
1513 
1514 			rfcomm_apply_pn(d, cr, pn);
1515 
1516 			d->state = BT_OPEN;
1517 			rfcomm_send_pn(s, 0, d);
1518 		} else {
1519 			rfcomm_send_dm(s, dlci);
1520 		}
1521 	}
1522 	return 0;
1523 }
1524 
1525 static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
1526 {
1527 	struct rfcomm_rpn *rpn;
1528 	u8 dlci;
1529 
1530 	u8 bit_rate  = 0;
1531 	u8 data_bits = 0;
1532 	u8 stop_bits = 0;
1533 	u8 parity    = 0;
1534 	u8 flow_ctrl = 0;
1535 	u8 xon_char  = 0;
1536 	u8 xoff_char = 0;
1537 	u16 rpn_mask = RFCOMM_RPN_PM_ALL;
1538 
1539 	if (len == 1) {
1540 		rpn = skb_pull_data(skb, 1);
1541 		if (!rpn)
1542 			return -EILSEQ;
1543 
1544 		dlci = __get_dlci(rpn->dlci);
1545 
1546 		if (!cr)
1547 			return 0;
1548 
1549 		bit_rate  = RFCOMM_RPN_BR_9600;
1550 		data_bits = RFCOMM_RPN_DATA_8;
1551 		stop_bits = RFCOMM_RPN_STOP_1;
1552 		parity    = RFCOMM_RPN_PARITY_NONE;
1553 		flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1554 		xon_char  = RFCOMM_RPN_XON_CHAR;
1555 		xoff_char = RFCOMM_RPN_XOFF_CHAR;
1556 		goto rpn_out;
1557 	}
1558 
1559 	rpn = skb_pull_data(skb, sizeof(*rpn));
1560 	if (!rpn)
1561 		return -EILSEQ;
1562 
1563 	dlci = __get_dlci(rpn->dlci);
1564 
1565 	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",
1566 	       dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
1567 	       rpn->xon_char, rpn->xoff_char, rpn->param_mask);
1568 
1569 	if (!cr)
1570 		return 0;
1571 
1572 	/* Check for sane values, ignore/accept bit_rate, 8 bits, 1 stop bit,
1573 	 * no parity, no flow control lines, normal XON/XOFF chars */
1574 
1575 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_BITRATE)) {
1576 		bit_rate = rpn->bit_rate;
1577 		if (bit_rate > RFCOMM_RPN_BR_230400) {
1578 			BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
1579 			bit_rate = RFCOMM_RPN_BR_9600;
1580 			rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
1581 		}
1582 	}
1583 
1584 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_DATA)) {
1585 		data_bits = __get_rpn_data_bits(rpn->line_settings);
1586 		if (data_bits != RFCOMM_RPN_DATA_8) {
1587 			BT_DBG("RPN data bits mismatch 0x%x", data_bits);
1588 			data_bits = RFCOMM_RPN_DATA_8;
1589 			rpn_mask ^= RFCOMM_RPN_PM_DATA;
1590 		}
1591 	}
1592 
1593 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_STOP)) {
1594 		stop_bits = __get_rpn_stop_bits(rpn->line_settings);
1595 		if (stop_bits != RFCOMM_RPN_STOP_1) {
1596 			BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
1597 			stop_bits = RFCOMM_RPN_STOP_1;
1598 			rpn_mask ^= RFCOMM_RPN_PM_STOP;
1599 		}
1600 	}
1601 
1602 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_PARITY)) {
1603 		parity = __get_rpn_parity(rpn->line_settings);
1604 		if (parity != RFCOMM_RPN_PARITY_NONE) {
1605 			BT_DBG("RPN parity mismatch 0x%x", parity);
1606 			parity = RFCOMM_RPN_PARITY_NONE;
1607 			rpn_mask ^= RFCOMM_RPN_PM_PARITY;
1608 		}
1609 	}
1610 
1611 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_FLOW)) {
1612 		flow_ctrl = rpn->flow_ctrl;
1613 		if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
1614 			BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
1615 			flow_ctrl = RFCOMM_RPN_FLOW_NONE;
1616 			rpn_mask ^= RFCOMM_RPN_PM_FLOW;
1617 		}
1618 	}
1619 
1620 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XON)) {
1621 		xon_char = rpn->xon_char;
1622 		if (xon_char != RFCOMM_RPN_XON_CHAR) {
1623 			BT_DBG("RPN XON char mismatch 0x%x", xon_char);
1624 			xon_char = RFCOMM_RPN_XON_CHAR;
1625 			rpn_mask ^= RFCOMM_RPN_PM_XON;
1626 		}
1627 	}
1628 
1629 	if (rpn->param_mask & cpu_to_le16(RFCOMM_RPN_PM_XOFF)) {
1630 		xoff_char = rpn->xoff_char;
1631 		if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
1632 			BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
1633 			xoff_char = RFCOMM_RPN_XOFF_CHAR;
1634 			rpn_mask ^= RFCOMM_RPN_PM_XOFF;
1635 		}
1636 	}
1637 
1638 rpn_out:
1639 	rfcomm_send_rpn(s, 0, dlci, bit_rate, data_bits, stop_bits,
1640 			parity, flow_ctrl, xon_char, xoff_char, rpn_mask);
1641 
1642 	return 0;
1643 }
1644 
1645 static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1646 {
1647 	struct rfcomm_rls *rls;
1648 	u8 dlci;
1649 
1650 	rls = skb_pull_data(skb, sizeof(*rls));
1651 	if (!rls)
1652 		return -EILSEQ;
1653 
1654 	dlci = __get_dlci(rls->dlci);
1655 	BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
1656 
1657 	if (!cr)
1658 		return 0;
1659 
1660 	/* We should probably do something with this information here. But
1661 	 * for now it's sufficient just to reply -- Bluetooth 1.1 says it's
1662 	 * mandatory to recognise and respond to RLS */
1663 
1664 	rfcomm_send_rls(s, 0, dlci, rls->status);
1665 
1666 	return 0;
1667 }
1668 
1669 static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
1670 {
1671 	struct rfcomm_msc *msc;
1672 	struct rfcomm_dlc *d;
1673 	u8 dlci;
1674 
1675 	msc = skb_pull_data(skb, sizeof(*msc));
1676 	if (!msc)
1677 		return -EILSEQ;
1678 
1679 	dlci = __get_dlci(msc->dlci);
1680 	BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
1681 
1682 	d = rfcomm_dlc_get(s, dlci);
1683 	if (!d)
1684 		return 0;
1685 
1686 	if (cr) {
1687 		if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
1688 			set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1689 		else
1690 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1691 
1692 		rfcomm_dlc_lock(d);
1693 
1694 		d->remote_v24_sig = msc->v24_sig;
1695 
1696 		if (d->modem_status)
1697 			d->modem_status(d, msc->v24_sig);
1698 
1699 		rfcomm_dlc_unlock(d);
1700 
1701 		rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
1702 
1703 		d->mscex |= RFCOMM_MSCEX_RX;
1704 	} else
1705 		d->mscex |= RFCOMM_MSCEX_TX;
1706 
1707 	return 0;
1708 }
1709 
1710 static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
1711 {
1712 	struct rfcomm_mcc *mcc;
1713 	u8 type, cr, len;
1714 
1715 	mcc = skb_pull_data(skb, sizeof(*mcc));
1716 	if (!mcc)
1717 		return -EILSEQ;
1718 
1719 	cr   = __test_cr(mcc->type);
1720 	type = __get_mcc_type(mcc->type);
1721 	len  = __get_mcc_len(mcc->len);
1722 
1723 	BT_DBG("%p type 0x%x cr %d", s, type, cr);
1724 
1725 	switch (type) {
1726 	case RFCOMM_PN:
1727 		rfcomm_recv_pn(s, cr, skb);
1728 		break;
1729 
1730 	case RFCOMM_RPN:
1731 		rfcomm_recv_rpn(s, cr, len, skb);
1732 		break;
1733 
1734 	case RFCOMM_RLS:
1735 		rfcomm_recv_rls(s, cr, skb);
1736 		break;
1737 
1738 	case RFCOMM_MSC:
1739 		rfcomm_recv_msc(s, cr, skb);
1740 		break;
1741 
1742 	case RFCOMM_FCOFF:
1743 		if (cr) {
1744 			set_bit(RFCOMM_TX_THROTTLED, &s->flags);
1745 			rfcomm_send_fcoff(s, 0);
1746 		}
1747 		break;
1748 
1749 	case RFCOMM_FCON:
1750 		if (cr) {
1751 			clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
1752 			rfcomm_send_fcon(s, 0);
1753 		}
1754 		break;
1755 
1756 	case RFCOMM_TEST:
1757 		if (cr)
1758 			rfcomm_send_test(s, 0, skb->data, skb->len);
1759 		break;
1760 
1761 	case RFCOMM_NSC:
1762 		break;
1763 
1764 	default:
1765 		BT_ERR("Unknown control type 0x%02x", type);
1766 		rfcomm_send_nsc(s, cr, type);
1767 		break;
1768 	}
1769 	return 0;
1770 }
1771 
1772 static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
1773 {
1774 	struct rfcomm_dlc *d;
1775 
1776 	BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
1777 
1778 	d = rfcomm_dlc_get(s, dlci);
1779 	if (!d) {
1780 		rfcomm_send_dm(s, dlci);
1781 		goto drop;
1782 	}
1783 
1784 	if (pf && d->cfc) {
1785 		u8 *credits = skb_pull_data(skb, 1);
1786 
1787 		if (!credits)
1788 			goto drop;
1789 
1790 		d->tx_credits += *credits;
1791 		if (d->tx_credits)
1792 			clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
1793 	}
1794 
1795 	if (skb->len && d->state == BT_CONNECTED) {
1796 		rfcomm_dlc_lock(d);
1797 		d->rx_credits--;
1798 		d->data_ready(d, skb);
1799 		rfcomm_dlc_unlock(d);
1800 		return 0;
1801 	}
1802 
1803 drop:
1804 	kfree_skb(skb);
1805 	return 0;
1806 }
1807 
1808 static struct rfcomm_session *rfcomm_recv_frame(struct rfcomm_session *s,
1809 						struct sk_buff *skb)
1810 {
1811 	struct rfcomm_hdr *hdr = (void *) skb->data;
1812 	u8 type, dlci, fcs;
1813 
1814 	if (!s) {
1815 		/* no session, so free socket data */
1816 		kfree_skb(skb);
1817 		return s;
1818 	}
1819 
1820 	if (skb->len < sizeof(*hdr) + 1) {
1821 		kfree_skb(skb);
1822 		return s;
1823 	}
1824 
1825 	dlci = __get_dlci(hdr->addr);
1826 	type = __get_type(hdr->ctrl);
1827 
1828 	/* Trim FCS */
1829 	skb->len--; skb->tail--;
1830 	fcs = *(u8 *)skb_tail_pointer(skb);
1831 
1832 	if (__check_fcs(skb->data, type, fcs)) {
1833 		BT_ERR("bad checksum in packet");
1834 		kfree_skb(skb);
1835 		return s;
1836 	}
1837 
1838 	if (__test_ea(hdr->len))
1839 		skb_pull(skb, 3);
1840 	else
1841 		skb_pull(skb, 4);
1842 
1843 	switch (type) {
1844 	case RFCOMM_SABM:
1845 		if (__test_pf(hdr->ctrl))
1846 			rfcomm_recv_sabm(s, dlci);
1847 		break;
1848 
1849 	case RFCOMM_DISC:
1850 		if (__test_pf(hdr->ctrl))
1851 			s = rfcomm_recv_disc(s, dlci);
1852 		break;
1853 
1854 	case RFCOMM_UA:
1855 		if (__test_pf(hdr->ctrl))
1856 			s = rfcomm_recv_ua(s, dlci);
1857 		break;
1858 
1859 	case RFCOMM_DM:
1860 		s = rfcomm_recv_dm(s, dlci);
1861 		break;
1862 
1863 	case RFCOMM_UIH:
1864 		if (dlci) {
1865 			rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
1866 			return s;
1867 		}
1868 		rfcomm_recv_mcc(s, skb);
1869 		break;
1870 
1871 	default:
1872 		BT_ERR("Unknown packet type 0x%02x", type);
1873 		break;
1874 	}
1875 	kfree_skb(skb);
1876 	return s;
1877 }
1878 
1879 /* ---- Connection and data processing ---- */
1880 
1881 static void rfcomm_process_connect(struct rfcomm_session *s)
1882 {
1883 	struct rfcomm_dlc *d, *n;
1884 
1885 	BT_DBG("session %p state %ld", s, s->state);
1886 
1887 	list_for_each_entry_safe(d, n, &s->dlcs, list) {
1888 		if (d->state == BT_CONFIG) {
1889 			d->mtu = s->mtu;
1890 			if (rfcomm_check_security(d)) {
1891 				rfcomm_send_pn(s, 1, d);
1892 			} else {
1893 				set_bit(RFCOMM_AUTH_PENDING, &d->flags);
1894 				rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1895 			}
1896 		}
1897 	}
1898 }
1899 
1900 /* Send data queued for the DLC.
1901  * Return number of frames left in the queue.
1902  */
1903 static int rfcomm_process_tx(struct rfcomm_dlc *d)
1904 {
1905 	struct sk_buff *skb;
1906 	int err;
1907 
1908 	BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
1909 			d, d->state, d->cfc, d->rx_credits, d->tx_credits);
1910 
1911 	/* Send pending MSC */
1912 	if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
1913 		rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
1914 
1915 	if (d->cfc) {
1916 		/* CFC enabled.
1917 		 * Give them some credits */
1918 		if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
1919 				d->rx_credits <= (d->cfc >> 2)) {
1920 			rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
1921 			d->rx_credits = d->cfc;
1922 		}
1923 	} else {
1924 		/* CFC disabled.
1925 		 * Give ourselves some credits */
1926 		d->tx_credits = 5;
1927 	}
1928 
1929 	if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
1930 		return skb_queue_len(&d->tx_queue);
1931 
1932 	while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
1933 		err = rfcomm_send_frame(d->session, skb->data, skb->len);
1934 		if (err < 0) {
1935 			skb_queue_head(&d->tx_queue, skb);
1936 			break;
1937 		}
1938 		kfree_skb(skb);
1939 		d->tx_credits--;
1940 	}
1941 
1942 	if (d->cfc && !d->tx_credits) {
1943 		/* We're out of TX credits.
1944 		 * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
1945 		set_bit(RFCOMM_TX_THROTTLED, &d->flags);
1946 	}
1947 
1948 	return skb_queue_len(&d->tx_queue);
1949 }
1950 
1951 static void rfcomm_process_dlcs(struct rfcomm_session *s)
1952 {
1953 	struct rfcomm_dlc *d, *n;
1954 
1955 	BT_DBG("session %p state %ld", s, s->state);
1956 
1957 	list_for_each_entry_safe(d, n, &s->dlcs, list) {
1958 		if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
1959 			__rfcomm_dlc_close(d, ETIMEDOUT);
1960 			continue;
1961 		}
1962 
1963 		if (test_bit(RFCOMM_ENC_DROP, &d->flags)) {
1964 			__rfcomm_dlc_close(d, ECONNREFUSED);
1965 			continue;
1966 		}
1967 
1968 		if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) {
1969 			rfcomm_dlc_clear_timer(d);
1970 			if (d->out) {
1971 				rfcomm_send_pn(s, 1, d);
1972 				rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
1973 			} else {
1974 				if (d->defer_setup) {
1975 					set_bit(RFCOMM_DEFER_SETUP, &d->flags);
1976 					rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
1977 
1978 					rfcomm_dlc_lock(d);
1979 					d->state = BT_CONNECT2;
1980 					d->state_change(d, 0);
1981 					rfcomm_dlc_unlock(d);
1982 				} else
1983 					__rfcomm_dlc_accept(d);
1984 			}
1985 			continue;
1986 		} else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) {
1987 			rfcomm_dlc_clear_timer(d);
1988 			if (!d->out)
1989 				rfcomm_send_dm(s, d->dlci);
1990 			else
1991 				d->state = BT_CLOSED;
1992 			__rfcomm_dlc_close(d, ECONNREFUSED);
1993 			continue;
1994 		}
1995 
1996 		if (test_bit(RFCOMM_SEC_PENDING, &d->flags))
1997 			continue;
1998 
1999 		if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
2000 			continue;
2001 
2002 		if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
2003 						d->mscex == RFCOMM_MSCEX_OK)
2004 			rfcomm_process_tx(d);
2005 	}
2006 }
2007 
2008 static struct rfcomm_session *rfcomm_process_rx(struct rfcomm_session *s)
2009 {
2010 	struct socket *sock = s->sock;
2011 	struct sock *sk = sock->sk;
2012 	struct sk_buff *skb;
2013 
2014 	BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue));
2015 
2016 	/* Get data directly from socket receive queue without copying it. */
2017 	while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
2018 		skb_orphan(skb);
2019 		if (!skb_linearize(skb) && sk->sk_state != BT_CLOSED) {
2020 			s = rfcomm_recv_frame(s, skb);
2021 			if (!s)
2022 				break;
2023 		} else {
2024 			kfree_skb(skb);
2025 		}
2026 	}
2027 
2028 	if (s && (sk->sk_state == BT_CLOSED))
2029 		s = rfcomm_session_close(s, sk->sk_err);
2030 
2031 	return s;
2032 }
2033 
2034 static void rfcomm_accept_connection(struct rfcomm_session *s)
2035 {
2036 	struct socket *sock = s->sock, *nsock;
2037 	int err;
2038 
2039 	/* Fast check for a new connection.
2040 	 * Avoids unnecessary socket allocations.
2041 	 */
2042 	if (list_empty(&bt_sk(sock->sk)->accept_q))
2043 		return;
2044 
2045 	BT_DBG("session %p", s);
2046 
2047 	err = kernel_accept(sock, &nsock, O_NONBLOCK);
2048 	if (err < 0)
2049 		return;
2050 
2051 	/* Set our callbacks */
2052 	nsock->sk->sk_data_ready   = rfcomm_l2data_ready;
2053 	nsock->sk->sk_state_change = rfcomm_l2state_change;
2054 
2055 	s = rfcomm_session_add(nsock, BT_OPEN);
2056 	if (s) {
2057 		/* We should adjust MTU on incoming sessions.
2058 		 * L2CAP MTU minus UIH header and FCS. */
2059 		s->mtu = min(l2cap_pi(nsock->sk)->chan->omtu,
2060 				l2cap_pi(nsock->sk)->chan->imtu) - 5;
2061 
2062 		rfcomm_schedule();
2063 	} else
2064 		sock_release(nsock);
2065 }
2066 
2067 static struct rfcomm_session *rfcomm_check_connection(struct rfcomm_session *s)
2068 {
2069 	struct sock *sk = s->sock->sk;
2070 
2071 	BT_DBG("%p state %ld", s, s->state);
2072 
2073 	switch (sk->sk_state) {
2074 	case BT_CONNECTED:
2075 		s->state = BT_CONNECT;
2076 
2077 		/* We can adjust MTU on outgoing sessions.
2078 		 * L2CAP MTU minus UIH header and FCS. */
2079 		s->mtu = min(l2cap_pi(sk)->chan->omtu, l2cap_pi(sk)->chan->imtu) - 5;
2080 
2081 		rfcomm_send_sabm(s, 0);
2082 		break;
2083 
2084 	case BT_CLOSED:
2085 		s = rfcomm_session_close(s, sk->sk_err);
2086 		break;
2087 	}
2088 	return s;
2089 }
2090 
2091 static void rfcomm_process_sessions(void)
2092 {
2093 	struct rfcomm_session *s, *n;
2094 
2095 	rfcomm_lock();
2096 
2097 	list_for_each_entry_safe(s, n, &session_list, list) {
2098 		if (test_and_clear_bit(RFCOMM_TIMED_OUT, &s->flags)) {
2099 			s->state = BT_DISCONN;
2100 			rfcomm_send_disc(s, 0);
2101 			continue;
2102 		}
2103 
2104 		switch (s->state) {
2105 		case BT_LISTEN:
2106 			rfcomm_accept_connection(s);
2107 			continue;
2108 
2109 		case BT_BOUND:
2110 			s = rfcomm_check_connection(s);
2111 			break;
2112 
2113 		default:
2114 			s = rfcomm_process_rx(s);
2115 			break;
2116 		}
2117 
2118 		if (s)
2119 			rfcomm_process_dlcs(s);
2120 	}
2121 
2122 	rfcomm_unlock();
2123 }
2124 
2125 static int rfcomm_add_listener(bdaddr_t *ba)
2126 {
2127 	struct sockaddr_l2 addr;
2128 	struct socket *sock;
2129 	struct sock *sk;
2130 	struct rfcomm_session *s;
2131 	int    err = 0;
2132 
2133 	/* Create socket */
2134 	err = rfcomm_l2sock_create(&sock);
2135 	if (err < 0) {
2136 		BT_ERR("Create socket failed %d", err);
2137 		return err;
2138 	}
2139 
2140 	/* Bind socket */
2141 	bacpy(&addr.l2_bdaddr, ba);
2142 	addr.l2_family = AF_BLUETOOTH;
2143 	addr.l2_psm    = cpu_to_le16(L2CAP_PSM_RFCOMM);
2144 	addr.l2_cid    = 0;
2145 	addr.l2_bdaddr_type = BDADDR_BREDR;
2146 	err = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr));
2147 	if (err < 0) {
2148 		BT_ERR("Bind failed %d", err);
2149 		goto failed;
2150 	}
2151 
2152 	/* Set L2CAP options */
2153 	sk = sock->sk;
2154 	lock_sock(sk);
2155 	/* Set MTU to 0 so L2CAP can auto select the MTU */
2156 	l2cap_pi(sk)->chan->imtu = 0;
2157 	release_sock(sk);
2158 
2159 	/* Start listening on the socket */
2160 	err = kernel_listen(sock, 10);
2161 	if (err) {
2162 		BT_ERR("Listen failed %d", err);
2163 		goto failed;
2164 	}
2165 
2166 	/* Add listening session */
2167 	s = rfcomm_session_add(sock, BT_LISTEN);
2168 	if (!s) {
2169 		err = -ENOMEM;
2170 		goto failed;
2171 	}
2172 
2173 	return 0;
2174 failed:
2175 	sock_release(sock);
2176 	return err;
2177 }
2178 
2179 static void rfcomm_kill_listener(void)
2180 {
2181 	struct rfcomm_session *s, *n;
2182 
2183 	BT_DBG("");
2184 
2185 	rfcomm_lock();
2186 	list_for_each_entry_safe(s, n, &session_list, list)
2187 		rfcomm_session_del(s);
2188 	rfcomm_unlock();
2189 }
2190 
2191 static int rfcomm_run(void *unused)
2192 {
2193 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
2194 	BT_DBG("");
2195 
2196 	set_user_nice(current, -10);
2197 
2198 	rfcomm_add_listener(BDADDR_ANY);
2199 
2200 	add_wait_queue(&rfcomm_wq, &wait);
2201 	while (!kthread_should_stop()) {
2202 
2203 		/* Process stuff */
2204 		rfcomm_process_sessions();
2205 
2206 		wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
2207 	}
2208 	remove_wait_queue(&rfcomm_wq, &wait);
2209 
2210 	rfcomm_kill_listener();
2211 
2212 	return 0;
2213 }
2214 
2215 static void rfcomm_security_cfm(struct hci_conn *conn, u8 status, u8 encrypt)
2216 {
2217 	struct rfcomm_session *s;
2218 	struct rfcomm_dlc *d, *n;
2219 
2220 	BT_DBG("conn %p status 0x%02x encrypt 0x%02x", conn, status, encrypt);
2221 
2222 	rfcomm_lock();
2223 
2224 	s = rfcomm_session_get(&conn->hdev->bdaddr, &conn->dst);
2225 	if (!s) {
2226 		rfcomm_unlock();
2227 		return;
2228 	}
2229 
2230 	list_for_each_entry_safe(d, n, &s->dlcs, list) {
2231 		if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) {
2232 			rfcomm_dlc_clear_timer(d);
2233 			if (status || encrypt == 0x00) {
2234 				set_bit(RFCOMM_ENC_DROP, &d->flags);
2235 				continue;
2236 			}
2237 		}
2238 
2239 		if (d->state == BT_CONNECTED && !status && encrypt == 0x00) {
2240 			if (d->sec_level == BT_SECURITY_MEDIUM) {
2241 				set_bit(RFCOMM_SEC_PENDING, &d->flags);
2242 				rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT);
2243 				continue;
2244 			} else if (d->sec_level == BT_SECURITY_HIGH ||
2245 				   d->sec_level == BT_SECURITY_FIPS) {
2246 				set_bit(RFCOMM_ENC_DROP, &d->flags);
2247 				continue;
2248 			}
2249 		}
2250 
2251 		if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags))
2252 			continue;
2253 
2254 		if (!status && hci_conn_check_secure(conn, d->sec_level))
2255 			set_bit(RFCOMM_AUTH_ACCEPT, &d->flags);
2256 		else
2257 			set_bit(RFCOMM_AUTH_REJECT, &d->flags);
2258 	}
2259 
2260 	rfcomm_unlock();
2261 
2262 	rfcomm_schedule();
2263 }
2264 
2265 static struct hci_cb rfcomm_cb = {
2266 	.name		= "RFCOMM",
2267 	.security_cfm	= rfcomm_security_cfm
2268 };
2269 
2270 static int rfcomm_dlc_debugfs_show(struct seq_file *f, void *x)
2271 {
2272 	struct rfcomm_session *s;
2273 
2274 	rfcomm_lock();
2275 
2276 	list_for_each_entry(s, &session_list, list) {
2277 		struct l2cap_chan *chan = l2cap_pi(s->sock->sk)->chan;
2278 		struct rfcomm_dlc *d;
2279 		list_for_each_entry(d, &s->dlcs, list) {
2280 			seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n",
2281 				   &chan->src, &chan->dst,
2282 				   d->state, d->dlci, d->mtu,
2283 				   d->rx_credits, d->tx_credits);
2284 		}
2285 	}
2286 
2287 	rfcomm_unlock();
2288 
2289 	return 0;
2290 }
2291 
2292 DEFINE_SHOW_ATTRIBUTE(rfcomm_dlc_debugfs);
2293 
2294 static struct dentry *rfcomm_dlc_debugfs;
2295 
2296 /* ---- Initialization ---- */
2297 static int __init rfcomm_init(void)
2298 {
2299 	int err;
2300 
2301 	hci_register_cb(&rfcomm_cb);
2302 
2303 	rfcomm_thread = kthread_run(rfcomm_run, NULL, "krfcommd");
2304 	if (IS_ERR(rfcomm_thread)) {
2305 		err = PTR_ERR(rfcomm_thread);
2306 		goto unregister;
2307 	}
2308 
2309 	err = rfcomm_init_ttys();
2310 	if (err < 0)
2311 		goto stop;
2312 
2313 	err = rfcomm_init_sockets();
2314 	if (err < 0)
2315 		goto cleanup;
2316 
2317 	BT_INFO("RFCOMM ver %s", VERSION);
2318 
2319 	if (IS_ERR_OR_NULL(bt_debugfs))
2320 		return 0;
2321 
2322 	rfcomm_dlc_debugfs = debugfs_create_file("rfcomm_dlc", 0444,
2323 						 bt_debugfs, NULL,
2324 						 &rfcomm_dlc_debugfs_fops);
2325 
2326 	return 0;
2327 
2328 cleanup:
2329 	rfcomm_cleanup_ttys();
2330 
2331 stop:
2332 	kthread_stop(rfcomm_thread);
2333 
2334 unregister:
2335 	hci_unregister_cb(&rfcomm_cb);
2336 
2337 	return err;
2338 }
2339 
2340 static void __exit rfcomm_exit(void)
2341 {
2342 	debugfs_remove(rfcomm_dlc_debugfs);
2343 
2344 	hci_unregister_cb(&rfcomm_cb);
2345 
2346 	kthread_stop(rfcomm_thread);
2347 
2348 	rfcomm_cleanup_ttys();
2349 
2350 	rfcomm_cleanup_sockets();
2351 }
2352 
2353 module_init(rfcomm_init);
2354 module_exit(rfcomm_exit);
2355 
2356 module_param(disable_cfc, bool, 0644);
2357 MODULE_PARM_DESC(disable_cfc, "Disable credit based flow control");
2358 
2359 module_param(channel_mtu, int, 0644);
2360 MODULE_PARM_DESC(channel_mtu, "Default MTU for the RFCOMM channel");
2361 
2362 module_param(l2cap_ertm, bool, 0644);
2363 MODULE_PARM_DESC(l2cap_ertm, "Use L2CAP ERTM mode for connection");
2364 
2365 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
2366 MODULE_DESCRIPTION("Bluetooth RFCOMM ver " VERSION);
2367 MODULE_VERSION(VERSION);
2368 MODULE_LICENSE("GPL");
2369 MODULE_ALIAS("bt-proto-3");
2370