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