sched/headers: Prepare to move signal wakeup & sigpending methods from <linux/sched...
[platform/kernel/linux-starfive.git] / net / bluetooth / rfcomm / sock.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  * RFCOMM sockets.
26  */
27
28 #include <linux/export.h>
29 #include <linux/debugfs.h>
30 #include <linux/sched/signal.h>
31
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/l2cap.h>
35 #include <net/bluetooth/rfcomm.h>
36
37 static const struct proto_ops rfcomm_sock_ops;
38
39 static struct bt_sock_list rfcomm_sk_list = {
40         .lock = __RW_LOCK_UNLOCKED(rfcomm_sk_list.lock)
41 };
42
43 static void rfcomm_sock_close(struct sock *sk);
44 static void rfcomm_sock_kill(struct sock *sk);
45
46 /* ---- DLC callbacks ----
47  *
48  * called under rfcomm_dlc_lock()
49  */
50 static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
51 {
52         struct sock *sk = d->owner;
53         if (!sk)
54                 return;
55
56         atomic_add(skb->len, &sk->sk_rmem_alloc);
57         skb_queue_tail(&sk->sk_receive_queue, skb);
58         sk->sk_data_ready(sk);
59
60         if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
61                 rfcomm_dlc_throttle(d);
62 }
63
64 static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
65 {
66         struct sock *sk = d->owner, *parent;
67         unsigned long flags;
68
69         if (!sk)
70                 return;
71
72         BT_DBG("dlc %p state %ld err %d", d, d->state, err);
73
74         local_irq_save(flags);
75         bh_lock_sock(sk);
76
77         if (err)
78                 sk->sk_err = err;
79
80         sk->sk_state = d->state;
81
82         parent = bt_sk(sk)->parent;
83         if (parent) {
84                 if (d->state == BT_CLOSED) {
85                         sock_set_flag(sk, SOCK_ZAPPED);
86                         bt_accept_unlink(sk);
87                 }
88                 parent->sk_data_ready(parent);
89         } else {
90                 if (d->state == BT_CONNECTED)
91                         rfcomm_session_getaddr(d->session,
92                                                &rfcomm_pi(sk)->src, NULL);
93                 sk->sk_state_change(sk);
94         }
95
96         bh_unlock_sock(sk);
97         local_irq_restore(flags);
98
99         if (parent && sock_flag(sk, SOCK_ZAPPED)) {
100                 /* We have to drop DLC lock here, otherwise
101                  * rfcomm_sock_destruct() will dead lock. */
102                 rfcomm_dlc_unlock(d);
103                 rfcomm_sock_kill(sk);
104                 rfcomm_dlc_lock(d);
105         }
106 }
107
108 /* ---- Socket functions ---- */
109 static struct sock *__rfcomm_get_listen_sock_by_addr(u8 channel, bdaddr_t *src)
110 {
111         struct sock *sk = NULL;
112
113         sk_for_each(sk, &rfcomm_sk_list.head) {
114                 if (rfcomm_pi(sk)->channel != channel)
115                         continue;
116
117                 if (bacmp(&rfcomm_pi(sk)->src, src))
118                         continue;
119
120                 if (sk->sk_state == BT_BOUND || sk->sk_state == BT_LISTEN)
121                         break;
122         }
123
124         return sk ? sk : NULL;
125 }
126
127 /* Find socket with channel and source bdaddr.
128  * Returns closest match.
129  */
130 static struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
131 {
132         struct sock *sk = NULL, *sk1 = NULL;
133
134         read_lock(&rfcomm_sk_list.lock);
135
136         sk_for_each(sk, &rfcomm_sk_list.head) {
137                 if (state && sk->sk_state != state)
138                         continue;
139
140                 if (rfcomm_pi(sk)->channel == channel) {
141                         /* Exact match. */
142                         if (!bacmp(&rfcomm_pi(sk)->src, src))
143                                 break;
144
145                         /* Closest match */
146                         if (!bacmp(&rfcomm_pi(sk)->src, BDADDR_ANY))
147                                 sk1 = sk;
148                 }
149         }
150
151         read_unlock(&rfcomm_sk_list.lock);
152
153         return sk ? sk : sk1;
154 }
155
156 static void rfcomm_sock_destruct(struct sock *sk)
157 {
158         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
159
160         BT_DBG("sk %p dlc %p", sk, d);
161
162         skb_queue_purge(&sk->sk_receive_queue);
163         skb_queue_purge(&sk->sk_write_queue);
164
165         rfcomm_dlc_lock(d);
166         rfcomm_pi(sk)->dlc = NULL;
167
168         /* Detach DLC if it's owned by this socket */
169         if (d->owner == sk)
170                 d->owner = NULL;
171         rfcomm_dlc_unlock(d);
172
173         rfcomm_dlc_put(d);
174 }
175
176 static void rfcomm_sock_cleanup_listen(struct sock *parent)
177 {
178         struct sock *sk;
179
180         BT_DBG("parent %p", parent);
181
182         /* Close not yet accepted dlcs */
183         while ((sk = bt_accept_dequeue(parent, NULL))) {
184                 rfcomm_sock_close(sk);
185                 rfcomm_sock_kill(sk);
186         }
187
188         parent->sk_state  = BT_CLOSED;
189         sock_set_flag(parent, SOCK_ZAPPED);
190 }
191
192 /* Kill socket (only if zapped and orphan)
193  * Must be called on unlocked socket.
194  */
195 static void rfcomm_sock_kill(struct sock *sk)
196 {
197         if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
198                 return;
199
200         BT_DBG("sk %p state %d refcnt %d", sk, sk->sk_state, atomic_read(&sk->sk_refcnt));
201
202         /* Kill poor orphan */
203         bt_sock_unlink(&rfcomm_sk_list, sk);
204         sock_set_flag(sk, SOCK_DEAD);
205         sock_put(sk);
206 }
207
208 static void __rfcomm_sock_close(struct sock *sk)
209 {
210         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
211
212         BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
213
214         switch (sk->sk_state) {
215         case BT_LISTEN:
216                 rfcomm_sock_cleanup_listen(sk);
217                 break;
218
219         case BT_CONNECT:
220         case BT_CONNECT2:
221         case BT_CONFIG:
222         case BT_CONNECTED:
223                 rfcomm_dlc_close(d, 0);
224
225         default:
226                 sock_set_flag(sk, SOCK_ZAPPED);
227                 break;
228         }
229 }
230
231 /* Close socket.
232  * Must be called on unlocked socket.
233  */
234 static void rfcomm_sock_close(struct sock *sk)
235 {
236         lock_sock(sk);
237         __rfcomm_sock_close(sk);
238         release_sock(sk);
239 }
240
241 static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
242 {
243         struct rfcomm_pinfo *pi = rfcomm_pi(sk);
244
245         BT_DBG("sk %p", sk);
246
247         if (parent) {
248                 sk->sk_type = parent->sk_type;
249                 pi->dlc->defer_setup = test_bit(BT_SK_DEFER_SETUP,
250                                                 &bt_sk(parent)->flags);
251
252                 pi->sec_level = rfcomm_pi(parent)->sec_level;
253                 pi->role_switch = rfcomm_pi(parent)->role_switch;
254
255                 security_sk_clone(parent, sk);
256         } else {
257                 pi->dlc->defer_setup = 0;
258
259                 pi->sec_level = BT_SECURITY_LOW;
260                 pi->role_switch = 0;
261         }
262
263         pi->dlc->sec_level = pi->sec_level;
264         pi->dlc->role_switch = pi->role_switch;
265 }
266
267 static struct proto rfcomm_proto = {
268         .name           = "RFCOMM",
269         .owner          = THIS_MODULE,
270         .obj_size       = sizeof(struct rfcomm_pinfo)
271 };
272
273 static struct sock *rfcomm_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio, int kern)
274 {
275         struct rfcomm_dlc *d;
276         struct sock *sk;
277
278         sk = sk_alloc(net, PF_BLUETOOTH, prio, &rfcomm_proto, kern);
279         if (!sk)
280                 return NULL;
281
282         sock_init_data(sock, sk);
283         INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
284
285         d = rfcomm_dlc_alloc(prio);
286         if (!d) {
287                 sk_free(sk);
288                 return NULL;
289         }
290
291         d->data_ready   = rfcomm_sk_data_ready;
292         d->state_change = rfcomm_sk_state_change;
293
294         rfcomm_pi(sk)->dlc = d;
295         d->owner = sk;
296
297         sk->sk_destruct = rfcomm_sock_destruct;
298         sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
299
300         sk->sk_sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
301         sk->sk_rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
302
303         sock_reset_flag(sk, SOCK_ZAPPED);
304
305         sk->sk_protocol = proto;
306         sk->sk_state    = BT_OPEN;
307
308         bt_sock_link(&rfcomm_sk_list, sk);
309
310         BT_DBG("sk %p", sk);
311         return sk;
312 }
313
314 static int rfcomm_sock_create(struct net *net, struct socket *sock,
315                               int protocol, int kern)
316 {
317         struct sock *sk;
318
319         BT_DBG("sock %p", sock);
320
321         sock->state = SS_UNCONNECTED;
322
323         if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
324                 return -ESOCKTNOSUPPORT;
325
326         sock->ops = &rfcomm_sock_ops;
327
328         sk = rfcomm_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
329         if (!sk)
330                 return -ENOMEM;
331
332         rfcomm_sock_init(sk, NULL);
333         return 0;
334 }
335
336 static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
337 {
338         struct sockaddr_rc sa;
339         struct sock *sk = sock->sk;
340         int len, err = 0;
341
342         if (!addr || addr->sa_family != AF_BLUETOOTH)
343                 return -EINVAL;
344
345         memset(&sa, 0, sizeof(sa));
346         len = min_t(unsigned int, sizeof(sa), addr_len);
347         memcpy(&sa, addr, len);
348
349         BT_DBG("sk %p %pMR", sk, &sa.rc_bdaddr);
350
351         lock_sock(sk);
352
353         if (sk->sk_state != BT_OPEN) {
354                 err = -EBADFD;
355                 goto done;
356         }
357
358         if (sk->sk_type != SOCK_STREAM) {
359                 err = -EINVAL;
360                 goto done;
361         }
362
363         write_lock(&rfcomm_sk_list.lock);
364
365         if (sa.rc_channel &&
366             __rfcomm_get_listen_sock_by_addr(sa.rc_channel, &sa.rc_bdaddr)) {
367                 err = -EADDRINUSE;
368         } else {
369                 /* Save source address */
370                 bacpy(&rfcomm_pi(sk)->src, &sa.rc_bdaddr);
371                 rfcomm_pi(sk)->channel = sa.rc_channel;
372                 sk->sk_state = BT_BOUND;
373         }
374
375         write_unlock(&rfcomm_sk_list.lock);
376
377 done:
378         release_sock(sk);
379         return err;
380 }
381
382 static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
383 {
384         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
385         struct sock *sk = sock->sk;
386         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
387         int err = 0;
388
389         BT_DBG("sk %p", sk);
390
391         if (alen < sizeof(struct sockaddr_rc) ||
392             addr->sa_family != AF_BLUETOOTH)
393                 return -EINVAL;
394
395         lock_sock(sk);
396
397         if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
398                 err = -EBADFD;
399                 goto done;
400         }
401
402         if (sk->sk_type != SOCK_STREAM) {
403                 err = -EINVAL;
404                 goto done;
405         }
406
407         sk->sk_state = BT_CONNECT;
408         bacpy(&rfcomm_pi(sk)->dst, &sa->rc_bdaddr);
409         rfcomm_pi(sk)->channel = sa->rc_channel;
410
411         d->sec_level = rfcomm_pi(sk)->sec_level;
412         d->role_switch = rfcomm_pi(sk)->role_switch;
413
414         err = rfcomm_dlc_open(d, &rfcomm_pi(sk)->src, &sa->rc_bdaddr,
415                               sa->rc_channel);
416         if (!err)
417                 err = bt_sock_wait_state(sk, BT_CONNECTED,
418                                 sock_sndtimeo(sk, flags & O_NONBLOCK));
419
420 done:
421         release_sock(sk);
422         return err;
423 }
424
425 static int rfcomm_sock_listen(struct socket *sock, int backlog)
426 {
427         struct sock *sk = sock->sk;
428         int err = 0;
429
430         BT_DBG("sk %p backlog %d", sk, backlog);
431
432         lock_sock(sk);
433
434         if (sk->sk_state != BT_BOUND) {
435                 err = -EBADFD;
436                 goto done;
437         }
438
439         if (sk->sk_type != SOCK_STREAM) {
440                 err = -EINVAL;
441                 goto done;
442         }
443
444         if (!rfcomm_pi(sk)->channel) {
445                 bdaddr_t *src = &rfcomm_pi(sk)->src;
446                 u8 channel;
447
448                 err = -EINVAL;
449
450                 write_lock(&rfcomm_sk_list.lock);
451
452                 for (channel = 1; channel < 31; channel++)
453                         if (!__rfcomm_get_listen_sock_by_addr(channel, src)) {
454                                 rfcomm_pi(sk)->channel = channel;
455                                 err = 0;
456                                 break;
457                         }
458
459                 write_unlock(&rfcomm_sk_list.lock);
460
461                 if (err < 0)
462                         goto done;
463         }
464
465         sk->sk_max_ack_backlog = backlog;
466         sk->sk_ack_backlog = 0;
467         sk->sk_state = BT_LISTEN;
468
469 done:
470         release_sock(sk);
471         return err;
472 }
473
474 static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
475 {
476         DEFINE_WAIT_FUNC(wait, woken_wake_function);
477         struct sock *sk = sock->sk, *nsk;
478         long timeo;
479         int err = 0;
480
481         lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
482
483         if (sk->sk_type != SOCK_STREAM) {
484                 err = -EINVAL;
485                 goto done;
486         }
487
488         timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
489
490         BT_DBG("sk %p timeo %ld", sk, timeo);
491
492         /* Wait for an incoming connection. (wake-one). */
493         add_wait_queue_exclusive(sk_sleep(sk), &wait);
494         while (1) {
495                 if (sk->sk_state != BT_LISTEN) {
496                         err = -EBADFD;
497                         break;
498                 }
499
500                 nsk = bt_accept_dequeue(sk, newsock);
501                 if (nsk)
502                         break;
503
504                 if (!timeo) {
505                         err = -EAGAIN;
506                         break;
507                 }
508
509                 if (signal_pending(current)) {
510                         err = sock_intr_errno(timeo);
511                         break;
512                 }
513
514                 release_sock(sk);
515
516                 timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
517
518                 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
519         }
520         remove_wait_queue(sk_sleep(sk), &wait);
521
522         if (err)
523                 goto done;
524
525         newsock->state = SS_CONNECTED;
526
527         BT_DBG("new socket %p", nsk);
528
529 done:
530         release_sock(sk);
531         return err;
532 }
533
534 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
535 {
536         struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
537         struct sock *sk = sock->sk;
538
539         BT_DBG("sock %p, sk %p", sock, sk);
540
541         if (peer && sk->sk_state != BT_CONNECTED &&
542             sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2)
543                 return -ENOTCONN;
544
545         memset(sa, 0, sizeof(*sa));
546         sa->rc_family  = AF_BLUETOOTH;
547         sa->rc_channel = rfcomm_pi(sk)->channel;
548         if (peer)
549                 bacpy(&sa->rc_bdaddr, &rfcomm_pi(sk)->dst);
550         else
551                 bacpy(&sa->rc_bdaddr, &rfcomm_pi(sk)->src);
552
553         *len = sizeof(struct sockaddr_rc);
554         return 0;
555 }
556
557 static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg,
558                                size_t len)
559 {
560         struct sock *sk = sock->sk;
561         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
562         struct sk_buff *skb;
563         int sent;
564
565         if (test_bit(RFCOMM_DEFER_SETUP, &d->flags))
566                 return -ENOTCONN;
567
568         if (msg->msg_flags & MSG_OOB)
569                 return -EOPNOTSUPP;
570
571         if (sk->sk_shutdown & SEND_SHUTDOWN)
572                 return -EPIPE;
573
574         BT_DBG("sock %p, sk %p", sock, sk);
575
576         lock_sock(sk);
577
578         sent = bt_sock_wait_ready(sk, msg->msg_flags);
579         if (sent)
580                 goto done;
581
582         while (len) {
583                 size_t size = min_t(size_t, len, d->mtu);
584                 int err;
585
586                 skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
587                                 msg->msg_flags & MSG_DONTWAIT, &err);
588                 if (!skb) {
589                         if (sent == 0)
590                                 sent = err;
591                         break;
592                 }
593                 skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
594
595                 err = memcpy_from_msg(skb_put(skb, size), msg, size);
596                 if (err) {
597                         kfree_skb(skb);
598                         if (sent == 0)
599                                 sent = err;
600                         break;
601                 }
602
603                 skb->priority = sk->sk_priority;
604
605                 err = rfcomm_dlc_send(d, skb);
606                 if (err < 0) {
607                         kfree_skb(skb);
608                         if (sent == 0)
609                                 sent = err;
610                         break;
611                 }
612
613                 sent += size;
614                 len  -= size;
615         }
616
617 done:
618         release_sock(sk);
619
620         return sent;
621 }
622
623 static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg,
624                                size_t size, int flags)
625 {
626         struct sock *sk = sock->sk;
627         struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
628         int len;
629
630         if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
631                 rfcomm_dlc_accept(d);
632                 return 0;
633         }
634
635         len = bt_sock_stream_recvmsg(sock, msg, size, flags);
636
637         lock_sock(sk);
638         if (!(flags & MSG_PEEK) && len > 0)
639                 atomic_sub(len, &sk->sk_rmem_alloc);
640
641         if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
642                 rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
643         release_sock(sk);
644
645         return len;
646 }
647
648 static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
649 {
650         struct sock *sk = sock->sk;
651         int err = 0;
652         u32 opt;
653
654         BT_DBG("sk %p", sk);
655
656         lock_sock(sk);
657
658         switch (optname) {
659         case RFCOMM_LM:
660                 if (get_user(opt, (u32 __user *) optval)) {
661                         err = -EFAULT;
662                         break;
663                 }
664
665                 if (opt & RFCOMM_LM_FIPS) {
666                         err = -EINVAL;
667                         break;
668                 }
669
670                 if (opt & RFCOMM_LM_AUTH)
671                         rfcomm_pi(sk)->sec_level = BT_SECURITY_LOW;
672                 if (opt & RFCOMM_LM_ENCRYPT)
673                         rfcomm_pi(sk)->sec_level = BT_SECURITY_MEDIUM;
674                 if (opt & RFCOMM_LM_SECURE)
675                         rfcomm_pi(sk)->sec_level = BT_SECURITY_HIGH;
676
677                 rfcomm_pi(sk)->role_switch = (opt & RFCOMM_LM_MASTER);
678                 break;
679
680         default:
681                 err = -ENOPROTOOPT;
682                 break;
683         }
684
685         release_sock(sk);
686         return err;
687 }
688
689 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
690 {
691         struct sock *sk = sock->sk;
692         struct bt_security sec;
693         int err = 0;
694         size_t len;
695         u32 opt;
696
697         BT_DBG("sk %p", sk);
698
699         if (level == SOL_RFCOMM)
700                 return rfcomm_sock_setsockopt_old(sock, optname, optval, optlen);
701
702         if (level != SOL_BLUETOOTH)
703                 return -ENOPROTOOPT;
704
705         lock_sock(sk);
706
707         switch (optname) {
708         case BT_SECURITY:
709                 if (sk->sk_type != SOCK_STREAM) {
710                         err = -EINVAL;
711                         break;
712                 }
713
714                 sec.level = BT_SECURITY_LOW;
715
716                 len = min_t(unsigned int, sizeof(sec), optlen);
717                 if (copy_from_user((char *) &sec, optval, len)) {
718                         err = -EFAULT;
719                         break;
720                 }
721
722                 if (sec.level > BT_SECURITY_HIGH) {
723                         err = -EINVAL;
724                         break;
725                 }
726
727                 rfcomm_pi(sk)->sec_level = sec.level;
728                 break;
729
730         case BT_DEFER_SETUP:
731                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
732                         err = -EINVAL;
733                         break;
734                 }
735
736                 if (get_user(opt, (u32 __user *) optval)) {
737                         err = -EFAULT;
738                         break;
739                 }
740
741                 if (opt)
742                         set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
743                 else
744                         clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
745
746                 break;
747
748         default:
749                 err = -ENOPROTOOPT;
750                 break;
751         }
752
753         release_sock(sk);
754         return err;
755 }
756
757 static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
758 {
759         struct sock *sk = sock->sk;
760         struct sock *l2cap_sk;
761         struct l2cap_conn *conn;
762         struct rfcomm_conninfo cinfo;
763         int len, err = 0;
764         u32 opt;
765
766         BT_DBG("sk %p", sk);
767
768         if (get_user(len, optlen))
769                 return -EFAULT;
770
771         lock_sock(sk);
772
773         switch (optname) {
774         case RFCOMM_LM:
775                 switch (rfcomm_pi(sk)->sec_level) {
776                 case BT_SECURITY_LOW:
777                         opt = RFCOMM_LM_AUTH;
778                         break;
779                 case BT_SECURITY_MEDIUM:
780                         opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT;
781                         break;
782                 case BT_SECURITY_HIGH:
783                         opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT |
784                               RFCOMM_LM_SECURE;
785                         break;
786                 case BT_SECURITY_FIPS:
787                         opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT |
788                               RFCOMM_LM_SECURE | RFCOMM_LM_FIPS;
789                         break;
790                 default:
791                         opt = 0;
792                         break;
793                 }
794
795                 if (rfcomm_pi(sk)->role_switch)
796                         opt |= RFCOMM_LM_MASTER;
797
798                 if (put_user(opt, (u32 __user *) optval))
799                         err = -EFAULT;
800
801                 break;
802
803         case RFCOMM_CONNINFO:
804                 if (sk->sk_state != BT_CONNECTED &&
805                                         !rfcomm_pi(sk)->dlc->defer_setup) {
806                         err = -ENOTCONN;
807                         break;
808                 }
809
810                 l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
811                 conn = l2cap_pi(l2cap_sk)->chan->conn;
812
813                 memset(&cinfo, 0, sizeof(cinfo));
814                 cinfo.hci_handle = conn->hcon->handle;
815                 memcpy(cinfo.dev_class, conn->hcon->dev_class, 3);
816
817                 len = min_t(unsigned int, len, sizeof(cinfo));
818                 if (copy_to_user(optval, (char *) &cinfo, len))
819                         err = -EFAULT;
820
821                 break;
822
823         default:
824                 err = -ENOPROTOOPT;
825                 break;
826         }
827
828         release_sock(sk);
829         return err;
830 }
831
832 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
833 {
834         struct sock *sk = sock->sk;
835         struct bt_security sec;
836         int len, err = 0;
837
838         BT_DBG("sk %p", sk);
839
840         if (level == SOL_RFCOMM)
841                 return rfcomm_sock_getsockopt_old(sock, optname, optval, optlen);
842
843         if (level != SOL_BLUETOOTH)
844                 return -ENOPROTOOPT;
845
846         if (get_user(len, optlen))
847                 return -EFAULT;
848
849         lock_sock(sk);
850
851         switch (optname) {
852         case BT_SECURITY:
853                 if (sk->sk_type != SOCK_STREAM) {
854                         err = -EINVAL;
855                         break;
856                 }
857
858                 sec.level = rfcomm_pi(sk)->sec_level;
859                 sec.key_size = 0;
860
861                 len = min_t(unsigned int, len, sizeof(sec));
862                 if (copy_to_user(optval, (char *) &sec, len))
863                         err = -EFAULT;
864
865                 break;
866
867         case BT_DEFER_SETUP:
868                 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
869                         err = -EINVAL;
870                         break;
871                 }
872
873                 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
874                              (u32 __user *) optval))
875                         err = -EFAULT;
876
877                 break;
878
879         default:
880                 err = -ENOPROTOOPT;
881                 break;
882         }
883
884         release_sock(sk);
885         return err;
886 }
887
888 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
889 {
890         struct sock *sk __maybe_unused = sock->sk;
891         int err;
892
893         BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
894
895         err = bt_sock_ioctl(sock, cmd, arg);
896
897         if (err == -ENOIOCTLCMD) {
898 #ifdef CONFIG_BT_RFCOMM_TTY
899                 lock_sock(sk);
900                 err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
901                 release_sock(sk);
902 #else
903                 err = -EOPNOTSUPP;
904 #endif
905         }
906
907         return err;
908 }
909
910 static int rfcomm_sock_shutdown(struct socket *sock, int how)
911 {
912         struct sock *sk = sock->sk;
913         int err = 0;
914
915         BT_DBG("sock %p, sk %p", sock, sk);
916
917         if (!sk)
918                 return 0;
919
920         lock_sock(sk);
921         if (!sk->sk_shutdown) {
922                 sk->sk_shutdown = SHUTDOWN_MASK;
923                 __rfcomm_sock_close(sk);
924
925                 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
926                     !(current->flags & PF_EXITING))
927                         err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
928         }
929         release_sock(sk);
930         return err;
931 }
932
933 static int rfcomm_sock_release(struct socket *sock)
934 {
935         struct sock *sk = sock->sk;
936         int err;
937
938         BT_DBG("sock %p, sk %p", sock, sk);
939
940         if (!sk)
941                 return 0;
942
943         err = rfcomm_sock_shutdown(sock, 2);
944
945         sock_orphan(sk);
946         rfcomm_sock_kill(sk);
947         return err;
948 }
949
950 /* ---- RFCOMM core layer callbacks ----
951  *
952  * called under rfcomm_lock()
953  */
954 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
955 {
956         struct sock *sk, *parent;
957         bdaddr_t src, dst;
958         int result = 0;
959
960         BT_DBG("session %p channel %d", s, channel);
961
962         rfcomm_session_getaddr(s, &src, &dst);
963
964         /* Check if we have socket listening on channel */
965         parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
966         if (!parent)
967                 return 0;
968
969         bh_lock_sock(parent);
970
971         /* Check for backlog size */
972         if (sk_acceptq_is_full(parent)) {
973                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
974                 goto done;
975         }
976
977         sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC, 0);
978         if (!sk)
979                 goto done;
980
981         bt_sock_reclassify_lock(sk, BTPROTO_RFCOMM);
982
983         rfcomm_sock_init(sk, parent);
984         bacpy(&rfcomm_pi(sk)->src, &src);
985         bacpy(&rfcomm_pi(sk)->dst, &dst);
986         rfcomm_pi(sk)->channel = channel;
987
988         sk->sk_state = BT_CONFIG;
989         bt_accept_enqueue(parent, sk);
990
991         /* Accept connection and return socket DLC */
992         *d = rfcomm_pi(sk)->dlc;
993         result = 1;
994
995 done:
996         bh_unlock_sock(parent);
997
998         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
999                 parent->sk_state_change(parent);
1000
1001         return result;
1002 }
1003
1004 static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
1005 {
1006         struct sock *sk;
1007
1008         read_lock(&rfcomm_sk_list.lock);
1009
1010         sk_for_each(sk, &rfcomm_sk_list.head) {
1011                 seq_printf(f, "%pMR %pMR %d %d\n",
1012                            &rfcomm_pi(sk)->src, &rfcomm_pi(sk)->dst,
1013                            sk->sk_state, rfcomm_pi(sk)->channel);
1014         }
1015
1016         read_unlock(&rfcomm_sk_list.lock);
1017
1018         return 0;
1019 }
1020
1021 static int rfcomm_sock_debugfs_open(struct inode *inode, struct file *file)
1022 {
1023         return single_open(file, rfcomm_sock_debugfs_show, inode->i_private);
1024 }
1025
1026 static const struct file_operations rfcomm_sock_debugfs_fops = {
1027         .open           = rfcomm_sock_debugfs_open,
1028         .read           = seq_read,
1029         .llseek         = seq_lseek,
1030         .release        = single_release,
1031 };
1032
1033 static struct dentry *rfcomm_sock_debugfs;
1034
1035 static const struct proto_ops rfcomm_sock_ops = {
1036         .family         = PF_BLUETOOTH,
1037         .owner          = THIS_MODULE,
1038         .release        = rfcomm_sock_release,
1039         .bind           = rfcomm_sock_bind,
1040         .connect        = rfcomm_sock_connect,
1041         .listen         = rfcomm_sock_listen,
1042         .accept         = rfcomm_sock_accept,
1043         .getname        = rfcomm_sock_getname,
1044         .sendmsg        = rfcomm_sock_sendmsg,
1045         .recvmsg        = rfcomm_sock_recvmsg,
1046         .shutdown       = rfcomm_sock_shutdown,
1047         .setsockopt     = rfcomm_sock_setsockopt,
1048         .getsockopt     = rfcomm_sock_getsockopt,
1049         .ioctl          = rfcomm_sock_ioctl,
1050         .poll           = bt_sock_poll,
1051         .socketpair     = sock_no_socketpair,
1052         .mmap           = sock_no_mmap
1053 };
1054
1055 static const struct net_proto_family rfcomm_sock_family_ops = {
1056         .family         = PF_BLUETOOTH,
1057         .owner          = THIS_MODULE,
1058         .create         = rfcomm_sock_create
1059 };
1060
1061 int __init rfcomm_init_sockets(void)
1062 {
1063         int err;
1064
1065         BUILD_BUG_ON(sizeof(struct sockaddr_rc) > sizeof(struct sockaddr));
1066
1067         err = proto_register(&rfcomm_proto, 0);
1068         if (err < 0)
1069                 return err;
1070
1071         err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops);
1072         if (err < 0) {
1073                 BT_ERR("RFCOMM socket layer registration failed");
1074                 goto error;
1075         }
1076
1077         err = bt_procfs_init(&init_net, "rfcomm", &rfcomm_sk_list, NULL);
1078         if (err < 0) {
1079                 BT_ERR("Failed to create RFCOMM proc file");
1080                 bt_sock_unregister(BTPROTO_RFCOMM);
1081                 goto error;
1082         }
1083
1084         BT_INFO("RFCOMM socket layer initialized");
1085
1086         if (IS_ERR_OR_NULL(bt_debugfs))
1087                 return 0;
1088
1089         rfcomm_sock_debugfs = debugfs_create_file("rfcomm", 0444,
1090                                                   bt_debugfs, NULL,
1091                                                   &rfcomm_sock_debugfs_fops);
1092
1093         return 0;
1094
1095 error:
1096         proto_unregister(&rfcomm_proto);
1097         return err;
1098 }
1099
1100 void __exit rfcomm_cleanup_sockets(void)
1101 {
1102         bt_procfs_cleanup(&init_net, "rfcomm");
1103
1104         debugfs_remove(rfcomm_sock_debugfs);
1105
1106         bt_sock_unregister(BTPROTO_RFCOMM);
1107
1108         proto_unregister(&rfcomm_proto);
1109 }