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