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