2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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;
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.
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.
25 /* Bluetooth address family and sockets. */
27 #include <linux/module.h>
28 #include <linux/debugfs.h>
29 #include <linux/stringify.h>
30 #include <linux/sched/signal.h>
32 #include <asm/ioctls.h>
34 #include <net/bluetooth/bluetooth.h>
35 #include <linux/proc_fs.h>
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);
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",
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",
71 void bt_sock_reclassify_lock(struct sock *sk, int proto)
74 BUG_ON(!sock_allow_reclassification(sk));
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]);
80 EXPORT_SYMBOL(bt_sock_reclassify_lock);
82 int bt_sock_register(int proto, const struct net_proto_family *ops)
86 if (proto < 0 || proto >= BT_MAX_PROTO)
89 write_lock(&bt_proto_lock);
94 bt_proto[proto] = ops;
96 write_unlock(&bt_proto_lock);
100 EXPORT_SYMBOL(bt_sock_register);
102 void bt_sock_unregister(int proto)
104 if (proto < 0 || proto >= BT_MAX_PROTO)
107 write_lock(&bt_proto_lock);
108 bt_proto[proto] = NULL;
109 write_unlock(&bt_proto_lock);
111 EXPORT_SYMBOL(bt_sock_unregister);
113 static int bt_sock_create(struct net *net, struct socket *sock, int proto,
118 if (net != &init_net)
119 return -EAFNOSUPPORT;
121 if (proto < 0 || proto >= BT_MAX_PROTO)
124 if (!bt_proto[proto])
125 request_module("bt-proto-%d", proto);
127 err = -EPROTONOSUPPORT;
129 read_lock(&bt_proto_lock);
131 if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
132 err = bt_proto[proto]->create(net, sock, proto, kern);
134 bt_sock_reclassify_lock(sock->sk, proto);
135 module_put(bt_proto[proto]->owner);
138 read_unlock(&bt_proto_lock);
143 void bt_sock_link(struct bt_sock_list *l, struct sock *sk)
145 write_lock(&l->lock);
146 sk_add_node(sk, &l->head);
147 write_unlock(&l->lock);
149 EXPORT_SYMBOL(bt_sock_link);
151 void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk)
153 write_lock(&l->lock);
154 sk_del_node_init(sk);
155 write_unlock(&l->lock);
157 EXPORT_SYMBOL(bt_sock_unlink);
159 void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh)
161 BT_DBG("parent %p, sk %p", parent, sk);
166 bh_lock_sock_nested(sk);
168 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
170 list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
171 bt_sk(sk)->parent = parent;
178 sk_acceptq_added(parent);
180 EXPORT_SYMBOL(bt_accept_enqueue);
182 /* Calling function must hold the sk lock.
183 * bt_sk(sk)->parent must be non-NULL meaning sk is in the parent list.
185 void bt_accept_unlink(struct sock *sk)
187 BT_DBG("sk %p state %d", sk, sk->sk_state);
189 list_del_init(&bt_sk(sk)->accept_q);
190 sk_acceptq_removed(bt_sk(sk)->parent);
191 bt_sk(sk)->parent = NULL;
194 EXPORT_SYMBOL(bt_accept_unlink);
196 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
198 struct bt_sock *s, *n;
201 BT_DBG("parent %p", parent);
204 list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
205 sk = (struct sock *)s;
207 /* Prevent early freeing of sk due to unlink and sock_kill */
211 /* Check sk has not already been unlinked via
212 * bt_accept_unlink() due to serialisation caused by sk locking
214 if (!bt_sk(sk)->parent) {
215 BT_DBG("sk %p, already unlinked", sk);
219 /* Restart the loop as sk is no longer in the list
220 * and also avoid a potential infinite loop because
221 * list_for_each_entry_safe() is not thread safe.
226 /* sk is safely in the parent list so reduce reference count */
229 /* FIXME: Is this check still needed */
230 if (sk->sk_state == BT_CLOSED) {
231 bt_accept_unlink(sk);
236 if (sk->sk_state == BT_CONNECTED || !newsock ||
237 test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags)) {
238 bt_accept_unlink(sk);
240 sock_graft(sk, newsock);
251 EXPORT_SYMBOL(bt_accept_dequeue);
253 int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
256 struct sock *sk = sock->sk;
262 BT_DBG("sock %p sk %p len %zu", sock, sk, len);
267 skb = skb_recv_datagram(sk, flags, &err);
269 if (sk->sk_shutdown & RCV_SHUTDOWN)
278 msg->msg_flags |= MSG_TRUNC;
282 skb_reset_transport_header(skb);
283 err = skb_copy_datagram_msg(skb, 0, msg, copied);
285 sock_recv_cmsgs(msg, sk, skb);
287 if (msg->msg_name && bt_sk(sk)->skb_msg_name)
288 bt_sk(sk)->skb_msg_name(skb, msg->msg_name,
291 if (bt_sk(sk)->skb_put_cmsg)
292 bt_sk(sk)->skb_put_cmsg(skb, msg, sk);
295 skb_free_datagram(sk, skb);
297 if (flags & MSG_TRUNC)
300 return err ? : copied;
302 EXPORT_SYMBOL(bt_sock_recvmsg);
304 static long bt_sock_data_wait(struct sock *sk, long timeo)
306 DECLARE_WAITQUEUE(wait, current);
308 add_wait_queue(sk_sleep(sk), &wait);
310 set_current_state(TASK_INTERRUPTIBLE);
312 if (!skb_queue_empty(&sk->sk_receive_queue))
315 if (sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN))
318 if (signal_pending(current) || !timeo)
321 sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
323 timeo = schedule_timeout(timeo);
325 sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);
328 __set_current_state(TASK_RUNNING);
329 remove_wait_queue(sk_sleep(sk), &wait);
333 int bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
334 size_t size, int flags)
336 struct sock *sk = sock->sk;
338 size_t target, copied = 0;
344 BT_DBG("sk %p size %zu", sk, size);
348 target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
349 timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
355 skb = skb_dequeue(&sk->sk_receive_queue);
357 if (copied >= target)
360 err = sock_error(sk);
363 if (sk->sk_shutdown & RCV_SHUTDOWN)
370 timeo = bt_sock_data_wait(sk, timeo);
372 if (signal_pending(current)) {
373 err = sock_intr_errno(timeo);
379 chunk = min_t(unsigned int, skb->len, size);
380 if (skb_copy_datagram_msg(skb, 0, msg, chunk)) {
381 skb_queue_head(&sk->sk_receive_queue, skb);
389 sock_recv_cmsgs(msg, sk, skb);
391 if (!(flags & MSG_PEEK)) {
392 int skb_len = skb_headlen(skb);
394 if (chunk <= skb_len) {
395 __skb_pull(skb, chunk);
397 struct sk_buff *frag;
399 __skb_pull(skb, skb_len);
402 skb_walk_frags(skb, frag) {
403 if (chunk <= frag->len) {
404 /* Pulling partial data */
406 skb->data_len -= chunk;
407 __skb_pull(frag, chunk);
409 } else if (frag->len) {
410 /* Pulling all frag data */
412 skb->len -= frag->len;
413 skb->data_len -= frag->len;
414 __skb_pull(frag, frag->len);
420 skb_queue_head(&sk->sk_receive_queue, skb);
426 /* put message back and return */
427 skb_queue_head(&sk->sk_receive_queue, skb);
434 return copied ? : err;
436 EXPORT_SYMBOL(bt_sock_stream_recvmsg);
438 static inline __poll_t bt_accept_poll(struct sock *parent)
440 struct bt_sock *s, *n;
443 list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
444 sk = (struct sock *)s;
445 if (sk->sk_state == BT_CONNECTED ||
446 (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags) &&
447 sk->sk_state == BT_CONNECT2))
448 return EPOLLIN | EPOLLRDNORM;
454 __poll_t bt_sock_poll(struct file *file, struct socket *sock,
457 struct sock *sk = sock->sk;
460 poll_wait(file, sk_sleep(sk), wait);
462 if (sk->sk_state == BT_LISTEN)
463 return bt_accept_poll(sk);
465 if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue))
467 (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? EPOLLPRI : 0);
469 if (sk->sk_shutdown & RCV_SHUTDOWN)
470 mask |= EPOLLRDHUP | EPOLLIN | EPOLLRDNORM;
472 if (sk->sk_shutdown == SHUTDOWN_MASK)
475 if (!skb_queue_empty_lockless(&sk->sk_receive_queue))
476 mask |= EPOLLIN | EPOLLRDNORM;
478 if (sk->sk_state == BT_CLOSED)
481 if (sk->sk_state == BT_CONNECT ||
482 sk->sk_state == BT_CONNECT2 ||
483 sk->sk_state == BT_CONFIG)
486 if (!test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags) && sock_writeable(sk))
487 mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
489 sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
493 EXPORT_SYMBOL(bt_sock_poll);
495 int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
497 struct sock *sk = sock->sk;
502 BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
506 if (sk->sk_state == BT_LISTEN)
509 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
512 err = put_user(amount, (int __user *)arg);
516 if (sk->sk_state == BT_LISTEN)
520 skb = skb_peek(&sk->sk_receive_queue);
521 amount = skb ? skb->len : 0;
523 err = put_user(amount, (int __user *)arg);
533 EXPORT_SYMBOL(bt_sock_ioctl);
535 /* This function expects the sk lock to be held when called */
536 int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
538 DECLARE_WAITQUEUE(wait, current);
543 add_wait_queue(sk_sleep(sk), &wait);
544 set_current_state(TASK_INTERRUPTIBLE);
545 while (sk->sk_state != state) {
551 if (signal_pending(current)) {
552 err = sock_intr_errno(timeo);
557 timeo = schedule_timeout(timeo);
559 set_current_state(TASK_INTERRUPTIBLE);
561 err = sock_error(sk);
565 __set_current_state(TASK_RUNNING);
566 remove_wait_queue(sk_sleep(sk), &wait);
569 EXPORT_SYMBOL(bt_sock_wait_state);
571 /* This function expects the sk lock to be held when called */
572 int bt_sock_wait_ready(struct sock *sk, unsigned int msg_flags)
574 DECLARE_WAITQUEUE(wait, current);
580 timeo = sock_sndtimeo(sk, !!(msg_flags & MSG_DONTWAIT));
582 add_wait_queue(sk_sleep(sk), &wait);
583 set_current_state(TASK_INTERRUPTIBLE);
584 while (test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags)) {
590 if (signal_pending(current)) {
591 err = sock_intr_errno(timeo);
596 timeo = schedule_timeout(timeo);
598 set_current_state(TASK_INTERRUPTIBLE);
600 err = sock_error(sk);
604 __set_current_state(TASK_RUNNING);
605 remove_wait_queue(sk_sleep(sk), &wait);
609 EXPORT_SYMBOL(bt_sock_wait_ready);
611 #ifdef CONFIG_PROC_FS
612 static void *bt_seq_start(struct seq_file *seq, loff_t *pos)
613 __acquires(seq->private->l->lock)
615 struct bt_sock_list *l = pde_data(file_inode(seq->file));
618 return seq_hlist_start_head(&l->head, *pos);
621 static void *bt_seq_next(struct seq_file *seq, void *v, loff_t *pos)
623 struct bt_sock_list *l = pde_data(file_inode(seq->file));
625 return seq_hlist_next(v, &l->head, pos);
628 static void bt_seq_stop(struct seq_file *seq, void *v)
629 __releases(seq->private->l->lock)
631 struct bt_sock_list *l = pde_data(file_inode(seq->file));
633 read_unlock(&l->lock);
636 static int bt_seq_show(struct seq_file *seq, void *v)
638 struct bt_sock_list *l = pde_data(file_inode(seq->file));
640 if (v == SEQ_START_TOKEN) {
641 seq_puts(seq, "sk RefCnt Rmem Wmem User Inode Parent");
643 if (l->custom_seq_show) {
645 l->custom_seq_show(seq, v);
650 struct sock *sk = sk_entry(v);
651 struct bt_sock *bt = bt_sk(sk);
654 "%pK %-6d %-6u %-6u %-6u %-6lu %-6lu",
656 refcount_read(&sk->sk_refcnt),
657 sk_rmem_alloc_get(sk),
658 sk_wmem_alloc_get(sk),
659 from_kuid(seq_user_ns(seq), sock_i_uid(sk)),
661 bt->parent ? sock_i_ino(bt->parent) : 0LU);
663 if (l->custom_seq_show) {
665 l->custom_seq_show(seq, v);
673 static const struct seq_operations bt_seq_ops = {
674 .start = bt_seq_start,
680 int bt_procfs_init(struct net *net, const char *name,
681 struct bt_sock_list *sk_list,
682 int (*seq_show)(struct seq_file *, void *))
684 sk_list->custom_seq_show = seq_show;
686 if (!proc_create_seq_data(name, 0, net->proc_net, &bt_seq_ops, sk_list))
691 void bt_procfs_cleanup(struct net *net, const char *name)
693 remove_proc_entry(name, net->proc_net);
696 int bt_procfs_init(struct net *net, const char *name,
697 struct bt_sock_list *sk_list,
698 int (*seq_show)(struct seq_file *, void *))
703 void bt_procfs_cleanup(struct net *net, const char *name)
707 EXPORT_SYMBOL(bt_procfs_init);
708 EXPORT_SYMBOL(bt_procfs_cleanup);
710 static const struct net_proto_family bt_sock_family_ops = {
711 .owner = THIS_MODULE,
712 .family = PF_BLUETOOTH,
713 .create = bt_sock_create,
716 struct dentry *bt_debugfs;
717 EXPORT_SYMBOL_GPL(bt_debugfs);
719 #define VERSION __stringify(BT_SUBSYS_VERSION) "." \
720 __stringify(BT_SUBSYS_REVISION)
722 static int __init bt_init(void)
726 sock_skb_cb_check_size(sizeof(struct bt_skb_cb));
728 BT_INFO("Core ver %s", VERSION);
734 bt_debugfs = debugfs_create_dir("bluetooth", NULL);
738 err = bt_sysfs_init();
742 err = sock_register(&bt_sock_family_ops);
746 BT_INFO("HCI device and connection manager initialized");
748 err = hci_sock_init();
750 goto unregister_socket;
773 sock_unregister(PF_BLUETOOTH);
781 static void __exit bt_exit(void)
791 sock_unregister(PF_BLUETOOTH);
797 debugfs_remove_recursive(bt_debugfs);
800 subsys_initcall(bt_init);
801 module_exit(bt_exit);
803 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
804 MODULE_DESCRIPTION("Bluetooth Core ver " VERSION);
805 MODULE_VERSION(VERSION);
806 MODULE_LICENSE("GPL");
807 MODULE_ALIAS_NETPROTO(PF_BLUETOOTH);