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