xref: /openbmc/linux/net/bluetooth/af_bluetooth.c (revision d30803f6)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4 
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10 
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24 
25 /* Bluetooth address family and sockets. */
26 
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/stringify.h>
30 #include <linux/sched/signal.h>
31 
32 #include <asm/ioctls.h>
33 
34 #include <net/bluetooth/bluetooth.h>
35 #include <linux/proc_fs.h>
36 
37 #include "leds.h"
38 #include "selftest.h"
39 
40 /* Bluetooth sockets */
41 #define BT_MAX_PROTO	(BTPROTO_LAST + 1)
42 static const struct net_proto_family *bt_proto[BT_MAX_PROTO];
43 static DEFINE_RWLOCK(bt_proto_lock);
44 
45 static struct lock_class_key bt_lock_key[BT_MAX_PROTO];
46 static const char *const bt_key_strings[BT_MAX_PROTO] = {
47 	"sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP",
48 	"sk_lock-AF_BLUETOOTH-BTPROTO_HCI",
49 	"sk_lock-AF_BLUETOOTH-BTPROTO_SCO",
50 	"sk_lock-AF_BLUETOOTH-BTPROTO_RFCOMM",
51 	"sk_lock-AF_BLUETOOTH-BTPROTO_BNEP",
52 	"sk_lock-AF_BLUETOOTH-BTPROTO_CMTP",
53 	"sk_lock-AF_BLUETOOTH-BTPROTO_HIDP",
54 	"sk_lock-AF_BLUETOOTH-BTPROTO_AVDTP",
55 	"sk_lock-AF_BLUETOOTH-BTPROTO_ISO",
56 };
57 
58 static struct lock_class_key bt_slock_key[BT_MAX_PROTO];
59 static const char *const bt_slock_key_strings[BT_MAX_PROTO] = {
60 	"slock-AF_BLUETOOTH-BTPROTO_L2CAP",
61 	"slock-AF_BLUETOOTH-BTPROTO_HCI",
62 	"slock-AF_BLUETOOTH-BTPROTO_SCO",
63 	"slock-AF_BLUETOOTH-BTPROTO_RFCOMM",
64 	"slock-AF_BLUETOOTH-BTPROTO_BNEP",
65 	"slock-AF_BLUETOOTH-BTPROTO_CMTP",
66 	"slock-AF_BLUETOOTH-BTPROTO_HIDP",
67 	"slock-AF_BLUETOOTH-BTPROTO_AVDTP",
68 	"slock-AF_BLUETOOTH-BTPROTO_ISO",
69 };
70 
bt_sock_reclassify_lock(struct sock * sk,int proto)71 void bt_sock_reclassify_lock(struct sock *sk, int proto)
72 {
73 	BUG_ON(!sk);
74 	BUG_ON(!sock_allow_reclassification(sk));
75 
76 	sock_lock_init_class_and_name(sk,
77 				      bt_slock_key_strings[proto], &bt_slock_key[proto],
78 				      bt_key_strings[proto], &bt_lock_key[proto]);
79 }
80 EXPORT_SYMBOL(bt_sock_reclassify_lock);
81 
bt_sock_register(int proto,const struct net_proto_family * ops)82 int bt_sock_register(int proto, const struct net_proto_family *ops)
83 {
84 	int err = 0;
85 
86 	if (proto < 0 || proto >= BT_MAX_PROTO)
87 		return -EINVAL;
88 
89 	write_lock(&bt_proto_lock);
90 
91 	if (bt_proto[proto])
92 		err = -EEXIST;
93 	else
94 		bt_proto[proto] = ops;
95 
96 	write_unlock(&bt_proto_lock);
97 
98 	return err;
99 }
100 EXPORT_SYMBOL(bt_sock_register);
101 
bt_sock_unregister(int proto)102 void bt_sock_unregister(int proto)
103 {
104 	if (proto < 0 || proto >= BT_MAX_PROTO)
105 		return;
106 
107 	write_lock(&bt_proto_lock);
108 	bt_proto[proto] = NULL;
109 	write_unlock(&bt_proto_lock);
110 }
111 EXPORT_SYMBOL(bt_sock_unregister);
112 
bt_sock_create(struct net * net,struct socket * sock,int proto,int kern)113 static int bt_sock_create(struct net *net, struct socket *sock, int proto,
114 			  int kern)
115 {
116 	int err;
117 
118 	if (net != &init_net)
119 		return -EAFNOSUPPORT;
120 
121 	if (proto < 0 || proto >= BT_MAX_PROTO)
122 		return -EINVAL;
123 
124 	if (!bt_proto[proto])
125 		request_module("bt-proto-%d", proto);
126 
127 	err = -EPROTONOSUPPORT;
128 
129 	read_lock(&bt_proto_lock);
130 
131 	if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
132 		err = bt_proto[proto]->create(net, sock, proto, kern);
133 		if (!err)
134 			bt_sock_reclassify_lock(sock->sk, proto);
135 		module_put(bt_proto[proto]->owner);
136 	}
137 
138 	read_unlock(&bt_proto_lock);
139 
140 	return err;
141 }
142 
bt_sock_alloc(struct net * net,struct socket * sock,struct proto * prot,int proto,gfp_t prio,int kern)143 struct sock *bt_sock_alloc(struct net *net, struct socket *sock,
144 			   struct proto *prot, int proto, gfp_t prio, int kern)
145 {
146 	struct sock *sk;
147 
148 	sk = sk_alloc(net, PF_BLUETOOTH, prio, prot, kern);
149 	if (!sk)
150 		return NULL;
151 
152 	sock_init_data(sock, sk);
153 	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
154 
155 	sock_reset_flag(sk, SOCK_ZAPPED);
156 
157 	sk->sk_protocol = proto;
158 	sk->sk_state    = BT_OPEN;
159 
160 	/* Init peer information so it can be properly monitored */
161 	if (!kern) {
162 		spin_lock(&sk->sk_peer_lock);
163 		sk->sk_peer_pid  = get_pid(task_tgid(current));
164 		sk->sk_peer_cred = get_current_cred();
165 		spin_unlock(&sk->sk_peer_lock);
166 	}
167 
168 	return sk;
169 }
170 EXPORT_SYMBOL(bt_sock_alloc);
171 
bt_sock_link(struct bt_sock_list * l,struct sock * sk)172 void bt_sock_link(struct bt_sock_list *l, struct sock *sk)
173 {
174 	write_lock(&l->lock);
175 	sk_add_node(sk, &l->head);
176 	write_unlock(&l->lock);
177 }
178 EXPORT_SYMBOL(bt_sock_link);
179 
bt_sock_unlink(struct bt_sock_list * l,struct sock * sk)180 void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk)
181 {
182 	write_lock(&l->lock);
183 	sk_del_node_init(sk);
184 	write_unlock(&l->lock);
185 }
186 EXPORT_SYMBOL(bt_sock_unlink);
187 
bt_sock_linked(struct bt_sock_list * l,struct sock * s)188 bool bt_sock_linked(struct bt_sock_list *l, struct sock *s)
189 {
190 	struct sock *sk;
191 
192 	if (!l || !s)
193 		return false;
194 
195 	read_lock(&l->lock);
196 
197 	sk_for_each(sk, &l->head) {
198 		if (s == sk) {
199 			read_unlock(&l->lock);
200 			return true;
201 		}
202 	}
203 
204 	read_unlock(&l->lock);
205 
206 	return false;
207 }
208 EXPORT_SYMBOL(bt_sock_linked);
209 
bt_accept_enqueue(struct sock * parent,struct sock * sk,bool bh)210 void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh)
211 {
212 	const struct cred *old_cred;
213 	struct pid *old_pid;
214 
215 	BT_DBG("parent %p, sk %p", parent, sk);
216 
217 	sock_hold(sk);
218 
219 	if (bh)
220 		bh_lock_sock_nested(sk);
221 	else
222 		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
223 
224 	list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
225 	bt_sk(sk)->parent = parent;
226 
227 	/* Copy credentials from parent since for incoming connections the
228 	 * socket is allocated by the kernel.
229 	 */
230 	spin_lock(&sk->sk_peer_lock);
231 	old_pid = sk->sk_peer_pid;
232 	old_cred = sk->sk_peer_cred;
233 	sk->sk_peer_pid = get_pid(parent->sk_peer_pid);
234 	sk->sk_peer_cred = get_cred(parent->sk_peer_cred);
235 	spin_unlock(&sk->sk_peer_lock);
236 
237 	put_pid(old_pid);
238 	put_cred(old_cred);
239 
240 	if (bh)
241 		bh_unlock_sock(sk);
242 	else
243 		release_sock(sk);
244 
245 	sk_acceptq_added(parent);
246 }
247 EXPORT_SYMBOL(bt_accept_enqueue);
248 
249 /* Calling function must hold the sk lock.
250  * bt_sk(sk)->parent must be non-NULL meaning sk is in the parent list.
251  */
bt_accept_unlink(struct sock * sk)252 void bt_accept_unlink(struct sock *sk)
253 {
254 	BT_DBG("sk %p state %d", sk, sk->sk_state);
255 
256 	list_del_init(&bt_sk(sk)->accept_q);
257 	sk_acceptq_removed(bt_sk(sk)->parent);
258 	bt_sk(sk)->parent = NULL;
259 	sock_put(sk);
260 }
261 EXPORT_SYMBOL(bt_accept_unlink);
262 
bt_accept_dequeue(struct sock * parent,struct socket * newsock)263 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
264 {
265 	struct bt_sock *s, *n;
266 	struct sock *sk;
267 
268 	BT_DBG("parent %p", parent);
269 
270 restart:
271 	list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
272 		sk = (struct sock *)s;
273 
274 		/* Prevent early freeing of sk due to unlink and sock_kill */
275 		sock_hold(sk);
276 		lock_sock(sk);
277 
278 		/* Check sk has not already been unlinked via
279 		 * bt_accept_unlink() due to serialisation caused by sk locking
280 		 */
281 		if (!bt_sk(sk)->parent) {
282 			BT_DBG("sk %p, already unlinked", sk);
283 			release_sock(sk);
284 			sock_put(sk);
285 
286 			/* Restart the loop as sk is no longer in the list
287 			 * and also avoid a potential infinite loop because
288 			 * list_for_each_entry_safe() is not thread safe.
289 			 */
290 			goto restart;
291 		}
292 
293 		/* sk is safely in the parent list so reduce reference count */
294 		sock_put(sk);
295 
296 		/* FIXME: Is this check still needed */
297 		if (sk->sk_state == BT_CLOSED) {
298 			bt_accept_unlink(sk);
299 			release_sock(sk);
300 			continue;
301 		}
302 
303 		if (sk->sk_state == BT_CONNECTED || !newsock ||
304 		    test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags)) {
305 			bt_accept_unlink(sk);
306 			if (newsock)
307 				sock_graft(sk, newsock);
308 
309 			release_sock(sk);
310 			return sk;
311 		}
312 
313 		release_sock(sk);
314 	}
315 
316 	return NULL;
317 }
318 EXPORT_SYMBOL(bt_accept_dequeue);
319 
bt_sock_recvmsg(struct socket * sock,struct msghdr * msg,size_t len,int flags)320 int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
321 		    int flags)
322 {
323 	struct sock *sk = sock->sk;
324 	struct sk_buff *skb;
325 	size_t copied;
326 	size_t skblen;
327 	int err;
328 
329 	BT_DBG("sock %p sk %p len %zu", sock, sk, len);
330 
331 	if (flags & MSG_OOB)
332 		return -EOPNOTSUPP;
333 
334 	skb = skb_recv_datagram(sk, flags, &err);
335 	if (!skb) {
336 		if (sk->sk_shutdown & RCV_SHUTDOWN)
337 			err = 0;
338 
339 		return err;
340 	}
341 
342 	skblen = skb->len;
343 	copied = skb->len;
344 	if (len < copied) {
345 		msg->msg_flags |= MSG_TRUNC;
346 		copied = len;
347 	}
348 
349 	skb_reset_transport_header(skb);
350 	err = skb_copy_datagram_msg(skb, 0, msg, copied);
351 	if (err == 0) {
352 		sock_recv_cmsgs(msg, sk, skb);
353 
354 		if (msg->msg_name && bt_sk(sk)->skb_msg_name)
355 			bt_sk(sk)->skb_msg_name(skb, msg->msg_name,
356 						&msg->msg_namelen);
357 
358 		if (test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags)) {
359 			u8 pkt_status = hci_skb_pkt_status(skb);
360 
361 			put_cmsg(msg, SOL_BLUETOOTH, BT_SCM_PKT_STATUS,
362 				 sizeof(pkt_status), &pkt_status);
363 		}
364 	}
365 
366 	skb_free_datagram(sk, skb);
367 
368 	if (flags & MSG_TRUNC)
369 		copied = skblen;
370 
371 	return err ? : copied;
372 }
373 EXPORT_SYMBOL(bt_sock_recvmsg);
374 
bt_sock_data_wait(struct sock * sk,long timeo)375 static long bt_sock_data_wait(struct sock *sk, long timeo)
376 {
377 	DECLARE_WAITQUEUE(wait, current);
378 
379 	add_wait_queue(sk_sleep(sk), &wait);
380 	for (;;) {
381 		set_current_state(TASK_INTERRUPTIBLE);
382 
383 		if (!skb_queue_empty(&sk->sk_receive_queue))
384 			break;
385 
386 		if (sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN))
387 			break;
388 
389 		if (signal_pending(current) || !timeo)
390 			break;
391 
392 		sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
393 		release_sock(sk);
394 		timeo = schedule_timeout(timeo);
395 		lock_sock(sk);
396 		sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
397 	}
398 
399 	__set_current_state(TASK_RUNNING);
400 	remove_wait_queue(sk_sleep(sk), &wait);
401 	return timeo;
402 }
403 
bt_sock_stream_recvmsg(struct socket * sock,struct msghdr * msg,size_t size,int flags)404 int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
405 			   size_t size, int flags)
406 {
407 	struct sock *sk = sock->sk;
408 	int err = 0;
409 	size_t target, copied = 0;
410 	long timeo;
411 
412 	if (flags & MSG_OOB)
413 		return -EOPNOTSUPP;
414 
415 	BT_DBG("sk %p size %zu", sk, size);
416 
417 	lock_sock(sk);
418 
419 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
420 	timeo  = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
421 
422 	do {
423 		struct sk_buff *skb;
424 		int chunk;
425 
426 		skb = skb_dequeue(&sk->sk_receive_queue);
427 		if (!skb) {
428 			if (copied >= target)
429 				break;
430 
431 			err = sock_error(sk);
432 			if (err)
433 				break;
434 			if (sk->sk_shutdown & RCV_SHUTDOWN)
435 				break;
436 
437 			err = -EAGAIN;
438 			if (!timeo)
439 				break;
440 
441 			timeo = bt_sock_data_wait(sk, timeo);
442 
443 			if (signal_pending(current)) {
444 				err = sock_intr_errno(timeo);
445 				goto out;
446 			}
447 			continue;
448 		}
449 
450 		chunk = min_t(unsigned int, skb->len, size);
451 		if (skb_copy_datagram_msg(skb, 0, msg, chunk)) {
452 			skb_queue_head(&sk->sk_receive_queue, skb);
453 			if (!copied)
454 				copied = -EFAULT;
455 			break;
456 		}
457 		copied += chunk;
458 		size   -= chunk;
459 
460 		sock_recv_cmsgs(msg, sk, skb);
461 
462 		if (!(flags & MSG_PEEK)) {
463 			int skb_len = skb_headlen(skb);
464 
465 			if (chunk <= skb_len) {
466 				__skb_pull(skb, chunk);
467 			} else {
468 				struct sk_buff *frag;
469 
470 				__skb_pull(skb, skb_len);
471 				chunk -= skb_len;
472 
473 				skb_walk_frags(skb, frag) {
474 					if (chunk <= frag->len) {
475 						/* Pulling partial data */
476 						skb->len -= chunk;
477 						skb->data_len -= chunk;
478 						__skb_pull(frag, chunk);
479 						break;
480 					} else if (frag->len) {
481 						/* Pulling all frag data */
482 						chunk -= frag->len;
483 						skb->len -= frag->len;
484 						skb->data_len -= frag->len;
485 						__skb_pull(frag, frag->len);
486 					}
487 				}
488 			}
489 
490 			if (skb->len) {
491 				skb_queue_head(&sk->sk_receive_queue, skb);
492 				break;
493 			}
494 			kfree_skb(skb);
495 
496 		} else {
497 			/* put message back and return */
498 			skb_queue_head(&sk->sk_receive_queue, skb);
499 			break;
500 		}
501 	} while (size);
502 
503 out:
504 	release_sock(sk);
505 	return copied ? : err;
506 }
507 EXPORT_SYMBOL(bt_sock_stream_recvmsg);
508 
bt_accept_poll(struct sock * parent)509 static inline __poll_t bt_accept_poll(struct sock *parent)
510 {
511 	struct bt_sock *s, *n;
512 	struct sock *sk;
513 
514 	list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
515 		sk = (struct sock *)s;
516 		if (sk->sk_state == BT_CONNECTED ||
517 		    (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags) &&
518 		     sk->sk_state == BT_CONNECT2))
519 			return EPOLLIN | EPOLLRDNORM;
520 	}
521 
522 	return 0;
523 }
524 
bt_sock_poll(struct file * file,struct socket * sock,poll_table * wait)525 __poll_t bt_sock_poll(struct file *file, struct socket *sock,
526 		      poll_table *wait)
527 {
528 	struct sock *sk = sock->sk;
529 	__poll_t mask = 0;
530 
531 	poll_wait(file, sk_sleep(sk), wait);
532 
533 	if (sk->sk_state == BT_LISTEN)
534 		return bt_accept_poll(sk);
535 
536 	if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue))
537 		mask |= EPOLLERR |
538 			(sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
539 
540 	if (sk->sk_shutdown & RCV_SHUTDOWN)
541 		mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
542 
543 	if (sk->sk_shutdown == SHUTDOWN_MASK)
544 		mask |= EPOLLHUP;
545 
546 	if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
547 		mask |= EPOLLIN | EPOLLRDNORM;
548 
549 	if (sk->sk_state == BT_CLOSED)
550 		mask |= EPOLLHUP;
551 
552 	if (sk->sk_state == BT_CONNECT ||
553 	    sk->sk_state == BT_CONNECT2 ||
554 	    sk->sk_state == BT_CONFIG)
555 		return mask;
556 
557 	if (!test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags) && sock_writeable(sk))
558 		mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
559 	else
560 		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
561 
562 	return mask;
563 }
564 EXPORT_SYMBOL(bt_sock_poll);
565 
bt_sock_ioctl(struct socket * sock,unsigned int cmd,unsigned long arg)566 int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
567 {
568 	struct sock *sk = sock->sk;
569 	struct sk_buff *skb;
570 	long amount;
571 	int err;
572 
573 	BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
574 
575 	switch (cmd) {
576 	case TIOCOUTQ:
577 		if (sk->sk_state == BT_LISTEN)
578 			return -EINVAL;
579 
580 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
581 		if (amount < 0)
582 			amount = 0;
583 		err = put_user(amount, (int __user *)arg);
584 		break;
585 
586 	case TIOCINQ:
587 		if (sk->sk_state == BT_LISTEN)
588 			return -EINVAL;
589 
590 		spin_lock(&sk->sk_receive_queue.lock);
591 		skb = skb_peek(&sk->sk_receive_queue);
592 		amount = skb ? skb->len : 0;
593 		spin_unlock(&sk->sk_receive_queue.lock);
594 
595 		err = put_user(amount, (int __user *)arg);
596 		break;
597 
598 	default:
599 		err = -ENOIOCTLCMD;
600 		break;
601 	}
602 
603 	return err;
604 }
605 EXPORT_SYMBOL(bt_sock_ioctl);
606 
607 /* This function expects the sk lock to be held when called */
bt_sock_wait_state(struct sock * sk,int state,unsigned long timeo)608 int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
609 {
610 	DECLARE_WAITQUEUE(wait, current);
611 	int err = 0;
612 
613 	BT_DBG("sk %p", sk);
614 
615 	add_wait_queue(sk_sleep(sk), &wait);
616 	set_current_state(TASK_INTERRUPTIBLE);
617 	while (sk->sk_state != state) {
618 		if (!timeo) {
619 			err = -EINPROGRESS;
620 			break;
621 		}
622 
623 		if (signal_pending(current)) {
624 			err = sock_intr_errno(timeo);
625 			break;
626 		}
627 
628 		release_sock(sk);
629 		timeo = schedule_timeout(timeo);
630 		lock_sock(sk);
631 		set_current_state(TASK_INTERRUPTIBLE);
632 
633 		err = sock_error(sk);
634 		if (err)
635 			break;
636 	}
637 	__set_current_state(TASK_RUNNING);
638 	remove_wait_queue(sk_sleep(sk), &wait);
639 	return err;
640 }
641 EXPORT_SYMBOL(bt_sock_wait_state);
642 
643 /* This function expects the sk lock to be held when called */
bt_sock_wait_ready(struct sock * sk,unsigned int msg_flags)644 int bt_sock_wait_ready(struct sock *sk, unsigned int msg_flags)
645 {
646 	DECLARE_WAITQUEUE(wait, current);
647 	unsigned long timeo;
648 	int err = 0;
649 
650 	BT_DBG("sk %p", sk);
651 
652 	timeo = sock_sndtimeo(sk, !!(msg_flags & MSG_DONTWAIT));
653 
654 	add_wait_queue(sk_sleep(sk), &wait);
655 	set_current_state(TASK_INTERRUPTIBLE);
656 	while (test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags)) {
657 		if (!timeo) {
658 			err = -EAGAIN;
659 			break;
660 		}
661 
662 		if (signal_pending(current)) {
663 			err = sock_intr_errno(timeo);
664 			break;
665 		}
666 
667 		release_sock(sk);
668 		timeo = schedule_timeout(timeo);
669 		lock_sock(sk);
670 		set_current_state(TASK_INTERRUPTIBLE);
671 
672 		err = sock_error(sk);
673 		if (err)
674 			break;
675 	}
676 	__set_current_state(TASK_RUNNING);
677 	remove_wait_queue(sk_sleep(sk), &wait);
678 
679 	return err;
680 }
681 EXPORT_SYMBOL(bt_sock_wait_ready);
682 
683 #ifdef CONFIG_PROC_FS
bt_seq_start(struct seq_file * seq,loff_t * pos)684 static void *bt_seq_start(struct seq_file *seq, loff_t *pos)
685 	__acquires(seq->private->l->lock)
686 {
687 	struct bt_sock_list *l = pde_data(file_inode(seq->file));
688 
689 	read_lock(&l->lock);
690 	return seq_hlist_start_head(&l->head, *pos);
691 }
692 
bt_seq_next(struct seq_file * seq,void * v,loff_t * pos)693 static void *bt_seq_next(struct seq_file *seq, void *v, loff_t *pos)
694 {
695 	struct bt_sock_list *l = pde_data(file_inode(seq->file));
696 
697 	return seq_hlist_next(v, &l->head, pos);
698 }
699 
bt_seq_stop(struct seq_file * seq,void * v)700 static void bt_seq_stop(struct seq_file *seq, void *v)
701 	__releases(seq->private->l->lock)
702 {
703 	struct bt_sock_list *l = pde_data(file_inode(seq->file));
704 
705 	read_unlock(&l->lock);
706 }
707 
bt_seq_show(struct seq_file * seq,void * v)708 static int bt_seq_show(struct seq_file *seq, void *v)
709 {
710 	struct bt_sock_list *l = pde_data(file_inode(seq->file));
711 
712 	if (v == SEQ_START_TOKEN) {
713 		seq_puts(seq, "sk               RefCnt Rmem   Wmem   User   Inode  Parent");
714 
715 		if (l->custom_seq_show) {
716 			seq_putc(seq, ' ');
717 			l->custom_seq_show(seq, v);
718 		}
719 
720 		seq_putc(seq, '\n');
721 	} else {
722 		struct sock *sk = sk_entry(v);
723 		struct bt_sock *bt = bt_sk(sk);
724 
725 		seq_printf(seq,
726 			   "%pK %-6d %-6u %-6u %-6u %-6lu %-6lu",
727 			   sk,
728 			   refcount_read(&sk->sk_refcnt),
729 			   sk_rmem_alloc_get(sk),
730 			   sk_wmem_alloc_get(sk),
731 			   from_kuid(seq_user_ns(seq), sock_i_uid(sk)),
732 			   sock_i_ino(sk),
733 			   bt->parent ? sock_i_ino(bt->parent) : 0LU);
734 
735 		if (l->custom_seq_show) {
736 			seq_putc(seq, ' ');
737 			l->custom_seq_show(seq, v);
738 		}
739 
740 		seq_putc(seq, '\n');
741 	}
742 	return 0;
743 }
744 
745 static const struct seq_operations bt_seq_ops = {
746 	.start = bt_seq_start,
747 	.next  = bt_seq_next,
748 	.stop  = bt_seq_stop,
749 	.show  = bt_seq_show,
750 };
751 
bt_procfs_init(struct net * net,const char * name,struct bt_sock_list * sk_list,int (* seq_show)(struct seq_file *,void *))752 int bt_procfs_init(struct net *net, const char *name,
753 		   struct bt_sock_list *sk_list,
754 		   int (*seq_show)(struct seq_file *, void *))
755 {
756 	sk_list->custom_seq_show = seq_show;
757 
758 	if (!proc_create_seq_data(name, 0, net->proc_net, &bt_seq_ops, sk_list))
759 		return -ENOMEM;
760 	return 0;
761 }
762 
bt_procfs_cleanup(struct net * net,const char * name)763 void bt_procfs_cleanup(struct net *net, const char *name)
764 {
765 	remove_proc_entry(name, net->proc_net);
766 }
767 #else
bt_procfs_init(struct net * net,const char * name,struct bt_sock_list * sk_list,int (* seq_show)(struct seq_file *,void *))768 int bt_procfs_init(struct net *net, const char *name,
769 		   struct bt_sock_list *sk_list,
770 		   int (*seq_show)(struct seq_file *, void *))
771 {
772 	return 0;
773 }
774 
bt_procfs_cleanup(struct net * net,const char * name)775 void bt_procfs_cleanup(struct net *net, const char *name)
776 {
777 }
778 #endif
779 EXPORT_SYMBOL(bt_procfs_init);
780 EXPORT_SYMBOL(bt_procfs_cleanup);
781 
782 static const struct net_proto_family bt_sock_family_ops = {
783 	.owner	= THIS_MODULE,
784 	.family	= PF_BLUETOOTH,
785 	.create	= bt_sock_create,
786 };
787 
788 struct dentry *bt_debugfs;
789 EXPORT_SYMBOL_GPL(bt_debugfs);
790 
791 #define VERSION __stringify(BT_SUBSYS_VERSION) "." \
792 		__stringify(BT_SUBSYS_REVISION)
793 
bt_init(void)794 static int __init bt_init(void)
795 {
796 	int err;
797 
798 	sock_skb_cb_check_size(sizeof(struct bt_skb_cb));
799 
800 	BT_INFO("Core ver %s", VERSION);
801 
802 	err = bt_selftest();
803 	if (err < 0)
804 		return err;
805 
806 	bt_debugfs = debugfs_create_dir("bluetooth", NULL);
807 
808 	bt_leds_init();
809 
810 	err = bt_sysfs_init();
811 	if (err < 0)
812 		goto cleanup_led;
813 
814 	err = sock_register(&bt_sock_family_ops);
815 	if (err)
816 		goto cleanup_sysfs;
817 
818 	BT_INFO("HCI device and connection manager initialized");
819 
820 	err = hci_sock_init();
821 	if (err)
822 		goto unregister_socket;
823 
824 	err = l2cap_init();
825 	if (err)
826 		goto cleanup_socket;
827 
828 	err = sco_init();
829 	if (err)
830 		goto cleanup_cap;
831 
832 	err = mgmt_init();
833 	if (err)
834 		goto cleanup_sco;
835 
836 	return 0;
837 
838 cleanup_sco:
839 	sco_exit();
840 cleanup_cap:
841 	l2cap_exit();
842 cleanup_socket:
843 	hci_sock_cleanup();
844 unregister_socket:
845 	sock_unregister(PF_BLUETOOTH);
846 cleanup_sysfs:
847 	bt_sysfs_cleanup();
848 cleanup_led:
849 	bt_leds_cleanup();
850 	debugfs_remove_recursive(bt_debugfs);
851 	return err;
852 }
853 
bt_exit(void)854 static void __exit bt_exit(void)
855 {
856 	iso_exit();
857 
858 	mgmt_exit();
859 
860 	sco_exit();
861 
862 	l2cap_exit();
863 
864 	hci_sock_cleanup();
865 
866 	sock_unregister(PF_BLUETOOTH);
867 
868 	bt_sysfs_cleanup();
869 
870 	bt_leds_cleanup();
871 
872 	debugfs_remove_recursive(bt_debugfs);
873 }
874 
875 subsys_initcall(bt_init);
876 module_exit(bt_exit);
877 
878 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
879 MODULE_DESCRIPTION("Bluetooth Core ver " VERSION);
880 MODULE_VERSION(VERSION);
881 MODULE_LICENSE("GPL");
882 MODULE_ALIAS_NETPROTO(PF_BLUETOOTH);
883