xref: /openbmc/linux/net/bluetooth/rfcomm/sock.c (revision d3402925)
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 	sock_hold(sk);
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 	/* Drop sock lock to avoid potential deadlock with the RFCOMM lock */
415 	release_sock(sk);
416 	err = rfcomm_dlc_open(d, &rfcomm_pi(sk)->src, &sa->rc_bdaddr,
417 			      sa->rc_channel);
418 	lock_sock(sk);
419 	if (!err && !sock_flag(sk, SOCK_ZAPPED))
420 		err = bt_sock_wait_state(sk, BT_CONNECTED,
421 				sock_sndtimeo(sk, flags & O_NONBLOCK));
422 
423 done:
424 	release_sock(sk);
425 	sock_put(sk);
426 	return err;
427 }
428 
429 static int rfcomm_sock_listen(struct socket *sock, int backlog)
430 {
431 	struct sock *sk = sock->sk;
432 	int err = 0;
433 
434 	BT_DBG("sk %p backlog %d", sk, backlog);
435 
436 	lock_sock(sk);
437 
438 	if (sk->sk_state != BT_BOUND) {
439 		err = -EBADFD;
440 		goto done;
441 	}
442 
443 	if (sk->sk_type != SOCK_STREAM) {
444 		err = -EINVAL;
445 		goto done;
446 	}
447 
448 	if (!rfcomm_pi(sk)->channel) {
449 		bdaddr_t *src = &rfcomm_pi(sk)->src;
450 		u8 channel;
451 
452 		err = -EINVAL;
453 
454 		write_lock(&rfcomm_sk_list.lock);
455 
456 		for (channel = 1; channel < 31; channel++)
457 			if (!__rfcomm_get_listen_sock_by_addr(channel, src)) {
458 				rfcomm_pi(sk)->channel = channel;
459 				err = 0;
460 				break;
461 			}
462 
463 		write_unlock(&rfcomm_sk_list.lock);
464 
465 		if (err < 0)
466 			goto done;
467 	}
468 
469 	sk->sk_max_ack_backlog = backlog;
470 	sk->sk_ack_backlog = 0;
471 	sk->sk_state = BT_LISTEN;
472 
473 done:
474 	release_sock(sk);
475 	return err;
476 }
477 
478 static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags,
479 			      bool kern)
480 {
481 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
482 	struct sock *sk = sock->sk, *nsk;
483 	long timeo;
484 	int err = 0;
485 
486 	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
487 
488 	if (sk->sk_type != SOCK_STREAM) {
489 		err = -EINVAL;
490 		goto done;
491 	}
492 
493 	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
494 
495 	BT_DBG("sk %p timeo %ld", sk, timeo);
496 
497 	/* Wait for an incoming connection. (wake-one). */
498 	add_wait_queue_exclusive(sk_sleep(sk), &wait);
499 	while (1) {
500 		if (sk->sk_state != BT_LISTEN) {
501 			err = -EBADFD;
502 			break;
503 		}
504 
505 		nsk = bt_accept_dequeue(sk, newsock);
506 		if (nsk)
507 			break;
508 
509 		if (!timeo) {
510 			err = -EAGAIN;
511 			break;
512 		}
513 
514 		if (signal_pending(current)) {
515 			err = sock_intr_errno(timeo);
516 			break;
517 		}
518 
519 		release_sock(sk);
520 
521 		timeo = wait_woken(&wait, TASK_INTERRUPTIBLE, timeo);
522 
523 		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
524 	}
525 	remove_wait_queue(sk_sleep(sk), &wait);
526 
527 	if (err)
528 		goto done;
529 
530 	newsock->state = SS_CONNECTED;
531 
532 	BT_DBG("new socket %p", nsk);
533 
534 done:
535 	release_sock(sk);
536 	return err;
537 }
538 
539 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int peer)
540 {
541 	struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
542 	struct sock *sk = sock->sk;
543 
544 	BT_DBG("sock %p, sk %p", sock, sk);
545 
546 	if (peer && sk->sk_state != BT_CONNECTED &&
547 	    sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2)
548 		return -ENOTCONN;
549 
550 	memset(sa, 0, sizeof(*sa));
551 	sa->rc_family  = AF_BLUETOOTH;
552 	sa->rc_channel = rfcomm_pi(sk)->channel;
553 	if (peer)
554 		bacpy(&sa->rc_bdaddr, &rfcomm_pi(sk)->dst);
555 	else
556 		bacpy(&sa->rc_bdaddr, &rfcomm_pi(sk)->src);
557 
558 	return sizeof(struct sockaddr_rc);
559 }
560 
561 static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg,
562 			       size_t len)
563 {
564 	struct sock *sk = sock->sk;
565 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
566 	struct sk_buff *skb;
567 	int sent;
568 
569 	if (test_bit(RFCOMM_DEFER_SETUP, &d->flags))
570 		return -ENOTCONN;
571 
572 	if (msg->msg_flags & MSG_OOB)
573 		return -EOPNOTSUPP;
574 
575 	if (sk->sk_shutdown & SEND_SHUTDOWN)
576 		return -EPIPE;
577 
578 	BT_DBG("sock %p, sk %p", sock, sk);
579 
580 	lock_sock(sk);
581 
582 	sent = bt_sock_wait_ready(sk, msg->msg_flags);
583 
584 	release_sock(sk);
585 
586 	if (sent)
587 		return sent;
588 
589 	skb = bt_skb_sendmmsg(sk, msg, len, d->mtu, RFCOMM_SKB_HEAD_RESERVE,
590 			      RFCOMM_SKB_TAIL_RESERVE);
591 	if (IS_ERR(skb))
592 		return PTR_ERR(skb);
593 
594 	sent = rfcomm_dlc_send(d, skb);
595 	if (sent < 0)
596 		kfree_skb(skb);
597 
598 	return sent;
599 }
600 
601 static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg,
602 			       size_t size, int flags)
603 {
604 	struct sock *sk = sock->sk;
605 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
606 	int len;
607 
608 	if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
609 		rfcomm_dlc_accept(d);
610 		return 0;
611 	}
612 
613 	len = bt_sock_stream_recvmsg(sock, msg, size, flags);
614 
615 	lock_sock(sk);
616 	if (!(flags & MSG_PEEK) && len > 0)
617 		atomic_sub(len, &sk->sk_rmem_alloc);
618 
619 	if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
620 		rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
621 	release_sock(sk);
622 
623 	return len;
624 }
625 
626 static int rfcomm_sock_setsockopt_old(struct socket *sock, int optname,
627 		sockptr_t optval, unsigned int optlen)
628 {
629 	struct sock *sk = sock->sk;
630 	int err = 0;
631 	u32 opt;
632 
633 	BT_DBG("sk %p", sk);
634 
635 	lock_sock(sk);
636 
637 	switch (optname) {
638 	case RFCOMM_LM:
639 		if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
640 			err = -EFAULT;
641 			break;
642 		}
643 
644 		if (opt & RFCOMM_LM_FIPS) {
645 			err = -EINVAL;
646 			break;
647 		}
648 
649 		if (opt & RFCOMM_LM_AUTH)
650 			rfcomm_pi(sk)->sec_level = BT_SECURITY_LOW;
651 		if (opt & RFCOMM_LM_ENCRYPT)
652 			rfcomm_pi(sk)->sec_level = BT_SECURITY_MEDIUM;
653 		if (opt & RFCOMM_LM_SECURE)
654 			rfcomm_pi(sk)->sec_level = BT_SECURITY_HIGH;
655 
656 		rfcomm_pi(sk)->role_switch = (opt & RFCOMM_LM_MASTER);
657 		break;
658 
659 	default:
660 		err = -ENOPROTOOPT;
661 		break;
662 	}
663 
664 	release_sock(sk);
665 	return err;
666 }
667 
668 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname,
669 		sockptr_t optval, unsigned int optlen)
670 {
671 	struct sock *sk = sock->sk;
672 	struct bt_security sec;
673 	int err = 0;
674 	size_t len;
675 	u32 opt;
676 
677 	BT_DBG("sk %p", sk);
678 
679 	if (level == SOL_RFCOMM)
680 		return rfcomm_sock_setsockopt_old(sock, optname, optval, optlen);
681 
682 	if (level != SOL_BLUETOOTH)
683 		return -ENOPROTOOPT;
684 
685 	lock_sock(sk);
686 
687 	switch (optname) {
688 	case BT_SECURITY:
689 		if (sk->sk_type != SOCK_STREAM) {
690 			err = -EINVAL;
691 			break;
692 		}
693 
694 		sec.level = BT_SECURITY_LOW;
695 
696 		len = min_t(unsigned int, sizeof(sec), optlen);
697 		if (copy_from_sockptr(&sec, optval, len)) {
698 			err = -EFAULT;
699 			break;
700 		}
701 
702 		if (sec.level > BT_SECURITY_HIGH) {
703 			err = -EINVAL;
704 			break;
705 		}
706 
707 		rfcomm_pi(sk)->sec_level = sec.level;
708 		break;
709 
710 	case BT_DEFER_SETUP:
711 		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
712 			err = -EINVAL;
713 			break;
714 		}
715 
716 		if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
717 			err = -EFAULT;
718 			break;
719 		}
720 
721 		if (opt)
722 			set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
723 		else
724 			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
725 
726 		break;
727 
728 	default:
729 		err = -ENOPROTOOPT;
730 		break;
731 	}
732 
733 	release_sock(sk);
734 	return err;
735 }
736 
737 static int rfcomm_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
738 {
739 	struct sock *sk = sock->sk;
740 	struct sock *l2cap_sk;
741 	struct l2cap_conn *conn;
742 	struct rfcomm_conninfo cinfo;
743 	int len, err = 0;
744 	u32 opt;
745 
746 	BT_DBG("sk %p", sk);
747 
748 	if (get_user(len, optlen))
749 		return -EFAULT;
750 
751 	lock_sock(sk);
752 
753 	switch (optname) {
754 	case RFCOMM_LM:
755 		switch (rfcomm_pi(sk)->sec_level) {
756 		case BT_SECURITY_LOW:
757 			opt = RFCOMM_LM_AUTH;
758 			break;
759 		case BT_SECURITY_MEDIUM:
760 			opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT;
761 			break;
762 		case BT_SECURITY_HIGH:
763 			opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT |
764 			      RFCOMM_LM_SECURE;
765 			break;
766 		case BT_SECURITY_FIPS:
767 			opt = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT |
768 			      RFCOMM_LM_SECURE | RFCOMM_LM_FIPS;
769 			break;
770 		default:
771 			opt = 0;
772 			break;
773 		}
774 
775 		if (rfcomm_pi(sk)->role_switch)
776 			opt |= RFCOMM_LM_MASTER;
777 
778 		if (put_user(opt, (u32 __user *) optval))
779 			err = -EFAULT;
780 
781 		break;
782 
783 	case RFCOMM_CONNINFO:
784 		if (sk->sk_state != BT_CONNECTED &&
785 					!rfcomm_pi(sk)->dlc->defer_setup) {
786 			err = -ENOTCONN;
787 			break;
788 		}
789 
790 		l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
791 		conn = l2cap_pi(l2cap_sk)->chan->conn;
792 
793 		memset(&cinfo, 0, sizeof(cinfo));
794 		cinfo.hci_handle = conn->hcon->handle;
795 		memcpy(cinfo.dev_class, conn->hcon->dev_class, 3);
796 
797 		len = min_t(unsigned int, len, sizeof(cinfo));
798 		if (copy_to_user(optval, (char *) &cinfo, len))
799 			err = -EFAULT;
800 
801 		break;
802 
803 	default:
804 		err = -ENOPROTOOPT;
805 		break;
806 	}
807 
808 	release_sock(sk);
809 	return err;
810 }
811 
812 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
813 {
814 	struct sock *sk = sock->sk;
815 	struct bt_security sec;
816 	int len, err = 0;
817 
818 	BT_DBG("sk %p", sk);
819 
820 	if (level == SOL_RFCOMM)
821 		return rfcomm_sock_getsockopt_old(sock, optname, optval, optlen);
822 
823 	if (level != SOL_BLUETOOTH)
824 		return -ENOPROTOOPT;
825 
826 	if (get_user(len, optlen))
827 		return -EFAULT;
828 
829 	lock_sock(sk);
830 
831 	switch (optname) {
832 	case BT_SECURITY:
833 		if (sk->sk_type != SOCK_STREAM) {
834 			err = -EINVAL;
835 			break;
836 		}
837 
838 		sec.level = rfcomm_pi(sk)->sec_level;
839 		sec.key_size = 0;
840 
841 		len = min_t(unsigned int, len, sizeof(sec));
842 		if (copy_to_user(optval, (char *) &sec, len))
843 			err = -EFAULT;
844 
845 		break;
846 
847 	case BT_DEFER_SETUP:
848 		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
849 			err = -EINVAL;
850 			break;
851 		}
852 
853 		if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
854 			     (u32 __user *) optval))
855 			err = -EFAULT;
856 
857 		break;
858 
859 	default:
860 		err = -ENOPROTOOPT;
861 		break;
862 	}
863 
864 	release_sock(sk);
865 	return err;
866 }
867 
868 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
869 {
870 	struct sock *sk __maybe_unused = sock->sk;
871 	int err;
872 
873 	BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
874 
875 	err = bt_sock_ioctl(sock, cmd, arg);
876 
877 	if (err == -ENOIOCTLCMD) {
878 #ifdef CONFIG_BT_RFCOMM_TTY
879 		lock_sock(sk);
880 		err = rfcomm_dev_ioctl(sk, cmd, (void __user *) arg);
881 		release_sock(sk);
882 #else
883 		err = -EOPNOTSUPP;
884 #endif
885 	}
886 
887 	return err;
888 }
889 
890 #ifdef CONFIG_COMPAT
891 static int rfcomm_sock_compat_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
892 {
893 	return rfcomm_sock_ioctl(sock, cmd, (unsigned long)compat_ptr(arg));
894 }
895 #endif
896 
897 static int rfcomm_sock_shutdown(struct socket *sock, int how)
898 {
899 	struct sock *sk = sock->sk;
900 	int err = 0;
901 
902 	BT_DBG("sock %p, sk %p", sock, sk);
903 
904 	if (!sk)
905 		return 0;
906 
907 	lock_sock(sk);
908 	if (!sk->sk_shutdown) {
909 		sk->sk_shutdown = SHUTDOWN_MASK;
910 
911 		release_sock(sk);
912 		__rfcomm_sock_close(sk);
913 		lock_sock(sk);
914 
915 		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
916 		    !(current->flags & PF_EXITING))
917 			err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
918 	}
919 	release_sock(sk);
920 	return err;
921 }
922 
923 static int rfcomm_sock_release(struct socket *sock)
924 {
925 	struct sock *sk = sock->sk;
926 	int err;
927 
928 	BT_DBG("sock %p, sk %p", sock, sk);
929 
930 	if (!sk)
931 		return 0;
932 
933 	err = rfcomm_sock_shutdown(sock, 2);
934 
935 	sock_orphan(sk);
936 	rfcomm_sock_kill(sk);
937 	return err;
938 }
939 
940 /* ---- RFCOMM core layer callbacks ----
941  *
942  * called under rfcomm_lock()
943  */
944 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
945 {
946 	struct sock *sk, *parent;
947 	bdaddr_t src, dst;
948 	int result = 0;
949 
950 	BT_DBG("session %p channel %d", s, channel);
951 
952 	rfcomm_session_getaddr(s, &src, &dst);
953 
954 	/* Check if we have socket listening on channel */
955 	parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
956 	if (!parent)
957 		return 0;
958 
959 	lock_sock(parent);
960 
961 	/* Check for backlog size */
962 	if (sk_acceptq_is_full(parent)) {
963 		BT_DBG("backlog full %d", parent->sk_ack_backlog);
964 		goto done;
965 	}
966 
967 	sk = rfcomm_sock_alloc(sock_net(parent), NULL, BTPROTO_RFCOMM, GFP_ATOMIC, 0);
968 	if (!sk)
969 		goto done;
970 
971 	bt_sock_reclassify_lock(sk, BTPROTO_RFCOMM);
972 
973 	rfcomm_sock_init(sk, parent);
974 	bacpy(&rfcomm_pi(sk)->src, &src);
975 	bacpy(&rfcomm_pi(sk)->dst, &dst);
976 	rfcomm_pi(sk)->channel = channel;
977 
978 	sk->sk_state = BT_CONFIG;
979 	bt_accept_enqueue(parent, sk, true);
980 
981 	/* Accept connection and return socket DLC */
982 	*d = rfcomm_pi(sk)->dlc;
983 	result = 1;
984 
985 done:
986 	release_sock(parent);
987 
988 	if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
989 		parent->sk_state_change(parent);
990 
991 	return result;
992 }
993 
994 static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
995 {
996 	struct sock *sk;
997 
998 	read_lock(&rfcomm_sk_list.lock);
999 
1000 	sk_for_each(sk, &rfcomm_sk_list.head) {
1001 		seq_printf(f, "%pMR %pMR %d %d\n",
1002 			   &rfcomm_pi(sk)->src, &rfcomm_pi(sk)->dst,
1003 			   sk->sk_state, rfcomm_pi(sk)->channel);
1004 	}
1005 
1006 	read_unlock(&rfcomm_sk_list.lock);
1007 
1008 	return 0;
1009 }
1010 
1011 DEFINE_SHOW_ATTRIBUTE(rfcomm_sock_debugfs);
1012 
1013 static struct dentry *rfcomm_sock_debugfs;
1014 
1015 static const struct proto_ops rfcomm_sock_ops = {
1016 	.family		= PF_BLUETOOTH,
1017 	.owner		= THIS_MODULE,
1018 	.release	= rfcomm_sock_release,
1019 	.bind		= rfcomm_sock_bind,
1020 	.connect	= rfcomm_sock_connect,
1021 	.listen		= rfcomm_sock_listen,
1022 	.accept		= rfcomm_sock_accept,
1023 	.getname	= rfcomm_sock_getname,
1024 	.sendmsg	= rfcomm_sock_sendmsg,
1025 	.recvmsg	= rfcomm_sock_recvmsg,
1026 	.shutdown	= rfcomm_sock_shutdown,
1027 	.setsockopt	= rfcomm_sock_setsockopt,
1028 	.getsockopt	= rfcomm_sock_getsockopt,
1029 	.ioctl		= rfcomm_sock_ioctl,
1030 	.gettstamp	= sock_gettstamp,
1031 	.poll		= bt_sock_poll,
1032 	.socketpair	= sock_no_socketpair,
1033 	.mmap		= sock_no_mmap,
1034 #ifdef CONFIG_COMPAT
1035 	.compat_ioctl	= rfcomm_sock_compat_ioctl,
1036 #endif
1037 };
1038 
1039 static const struct net_proto_family rfcomm_sock_family_ops = {
1040 	.family		= PF_BLUETOOTH,
1041 	.owner		= THIS_MODULE,
1042 	.create		= rfcomm_sock_create
1043 };
1044 
1045 int __init rfcomm_init_sockets(void)
1046 {
1047 	int err;
1048 
1049 	BUILD_BUG_ON(sizeof(struct sockaddr_rc) > sizeof(struct sockaddr));
1050 
1051 	err = proto_register(&rfcomm_proto, 0);
1052 	if (err < 0)
1053 		return err;
1054 
1055 	err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops);
1056 	if (err < 0) {
1057 		BT_ERR("RFCOMM socket layer registration failed");
1058 		goto error;
1059 	}
1060 
1061 	err = bt_procfs_init(&init_net, "rfcomm", &rfcomm_sk_list, NULL);
1062 	if (err < 0) {
1063 		BT_ERR("Failed to create RFCOMM proc file");
1064 		bt_sock_unregister(BTPROTO_RFCOMM);
1065 		goto error;
1066 	}
1067 
1068 	BT_INFO("RFCOMM socket layer initialized");
1069 
1070 	if (IS_ERR_OR_NULL(bt_debugfs))
1071 		return 0;
1072 
1073 	rfcomm_sock_debugfs = debugfs_create_file("rfcomm", 0444,
1074 						  bt_debugfs, NULL,
1075 						  &rfcomm_sock_debugfs_fops);
1076 
1077 	return 0;
1078 
1079 error:
1080 	proto_unregister(&rfcomm_proto);
1081 	return err;
1082 }
1083 
1084 void __exit rfcomm_cleanup_sockets(void)
1085 {
1086 	bt_procfs_cleanup(&init_net, "rfcomm");
1087 
1088 	debugfs_remove(rfcomm_sock_debugfs);
1089 
1090 	bt_sock_unregister(BTPROTO_RFCOMM);
1091 
1092 	proto_unregister(&rfcomm_proto);
1093 }
1094