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