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