xref: /linux/net/bluetooth/rfcomm/sock.c (revision 54a8a2220c936a47840c9a3d74910c5a56fae2ed)
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  * $Id: sock.c,v 1.24 2002/10/03 01:00:34 maxk Exp $
28  */
29 
30 #include <linux/config.h>
31 #include <linux/module.h>
32 
33 #include <linux/types.h>
34 #include <linux/errno.h>
35 #include <linux/kernel.h>
36 #include <linux/sched.h>
37 #include <linux/slab.h>
38 #include <linux/poll.h>
39 #include <linux/fcntl.h>
40 #include <linux/init.h>
41 #include <linux/interrupt.h>
42 #include <linux/socket.h>
43 #include <linux/skbuff.h>
44 #include <linux/list.h>
45 #include <linux/proc_fs.h>
46 #include <linux/seq_file.h>
47 #include <net/sock.h>
48 
49 #include <asm/system.h>
50 #include <asm/uaccess.h>
51 
52 #include <net/bluetooth/bluetooth.h>
53 #include <net/bluetooth/hci_core.h>
54 #include <net/bluetooth/l2cap.h>
55 #include <net/bluetooth/rfcomm.h>
56 
57 #ifndef CONFIG_BT_RFCOMM_DEBUG
58 #undef  BT_DBG
59 #define BT_DBG(D...)
60 #endif
61 
62 static struct proto_ops rfcomm_sock_ops;
63 
64 static struct bt_sock_list rfcomm_sk_list = {
65 	.lock = RW_LOCK_UNLOCKED
66 };
67 
68 static void rfcomm_sock_close(struct sock *sk);
69 static void rfcomm_sock_kill(struct sock *sk);
70 
71 /* ---- DLC callbacks ----
72  *
73  * called under rfcomm_dlc_lock()
74  */
75 static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
76 {
77 	struct sock *sk = d->owner;
78 	if (!sk)
79 		return;
80 
81 	atomic_add(skb->len, &sk->sk_rmem_alloc);
82 	skb_queue_tail(&sk->sk_receive_queue, skb);
83 	sk->sk_data_ready(sk, skb->len);
84 
85 	if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf)
86 		rfcomm_dlc_throttle(d);
87 }
88 
89 static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
90 {
91 	struct sock *sk = d->owner, *parent;
92 	if (!sk)
93 		return;
94 
95 	BT_DBG("dlc %p state %ld err %d", d, d->state, err);
96 
97 	bh_lock_sock(sk);
98 
99 	if (err)
100 		sk->sk_err = err;
101 
102 	sk->sk_state = d->state;
103 
104 	parent = bt_sk(sk)->parent;
105 	if (parent) {
106 		if (d->state == BT_CLOSED) {
107 			sock_set_flag(sk, SOCK_ZAPPED);
108 			bt_accept_unlink(sk);
109 		}
110 		parent->sk_data_ready(parent, 0);
111 	} else {
112 		if (d->state == BT_CONNECTED)
113 			rfcomm_session_getaddr(d->session, &bt_sk(sk)->src, NULL);
114 		sk->sk_state_change(sk);
115 	}
116 
117 	bh_unlock_sock(sk);
118 
119 	if (parent && sock_flag(sk, SOCK_ZAPPED)) {
120 		/* We have to drop DLC lock here, otherwise
121 		 * rfcomm_sock_destruct() will dead lock. */
122 		rfcomm_dlc_unlock(d);
123 		rfcomm_sock_kill(sk);
124 		rfcomm_dlc_lock(d);
125 	}
126 }
127 
128 /* ---- Socket functions ---- */
129 static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
130 {
131 	struct sock *sk = NULL;
132 	struct hlist_node *node;
133 
134 	sk_for_each(sk, node, &rfcomm_sk_list.head) {
135 		if (rfcomm_pi(sk)->channel == channel &&
136 				!bacmp(&bt_sk(sk)->src, src))
137 			break;
138 	}
139 
140 	return node ? sk : NULL;
141 }
142 
143 /* Find socket with channel and source bdaddr.
144  * Returns closest match.
145  */
146 static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
147 {
148 	struct sock *sk = NULL, *sk1 = NULL;
149 	struct hlist_node *node;
150 
151 	sk_for_each(sk, node, &rfcomm_sk_list.head) {
152 		if (state && sk->sk_state != state)
153 			continue;
154 
155 		if (rfcomm_pi(sk)->channel == channel) {
156 			/* Exact match. */
157 			if (!bacmp(&bt_sk(sk)->src, src))
158 				break;
159 
160 			/* Closest match */
161 			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
162 				sk1 = sk;
163 		}
164 	}
165 	return node ? sk : sk1;
166 }
167 
168 /* Find socket with given address (channel, src).
169  * Returns locked socket */
170 static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
171 {
172 	struct sock *s;
173 	read_lock(&rfcomm_sk_list.lock);
174 	s = __rfcomm_get_sock_by_channel(state, channel, src);
175 	if (s) bh_lock_sock(s);
176 	read_unlock(&rfcomm_sk_list.lock);
177 	return s;
178 }
179 
180 static void rfcomm_sock_destruct(struct sock *sk)
181 {
182 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
183 
184 	BT_DBG("sk %p dlc %p", sk, d);
185 
186 	skb_queue_purge(&sk->sk_receive_queue);
187 	skb_queue_purge(&sk->sk_write_queue);
188 
189 	rfcomm_dlc_lock(d);
190 	rfcomm_pi(sk)->dlc = NULL;
191 
192 	/* Detach DLC if it's owned by this socket */
193 	if (d->owner == sk)
194 		d->owner = NULL;
195 	rfcomm_dlc_unlock(d);
196 
197 	rfcomm_dlc_put(d);
198 }
199 
200 static void rfcomm_sock_cleanup_listen(struct sock *parent)
201 {
202 	struct sock *sk;
203 
204 	BT_DBG("parent %p", parent);
205 
206 	/* Close not yet accepted dlcs */
207 	while ((sk = bt_accept_dequeue(parent, NULL))) {
208 		rfcomm_sock_close(sk);
209 		rfcomm_sock_kill(sk);
210 	}
211 
212 	parent->sk_state  = BT_CLOSED;
213 	sock_set_flag(parent, SOCK_ZAPPED);
214 }
215 
216 /* Kill socket (only if zapped and orphan)
217  * Must be called on unlocked socket.
218  */
219 static void rfcomm_sock_kill(struct sock *sk)
220 {
221 	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
222 		return;
223 
224 	BT_DBG("sk %p state %d refcnt %d", sk, sk->sk_state, atomic_read(&sk->sk_refcnt));
225 
226 	/* Kill poor orphan */
227 	bt_sock_unlink(&rfcomm_sk_list, sk);
228 	sock_set_flag(sk, SOCK_DEAD);
229 	sock_put(sk);
230 }
231 
232 static void __rfcomm_sock_close(struct sock *sk)
233 {
234 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
235 
236 	BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
237 
238 	switch (sk->sk_state) {
239 	case BT_LISTEN:
240 		rfcomm_sock_cleanup_listen(sk);
241 		break;
242 
243 	case BT_CONNECT:
244 	case BT_CONNECT2:
245 	case BT_CONFIG:
246 	case BT_CONNECTED:
247 		rfcomm_dlc_close(d, 0);
248 
249 	default:
250 		sock_set_flag(sk, SOCK_ZAPPED);
251 		break;
252 	}
253 }
254 
255 /* Close socket.
256  * Must be called on unlocked socket.
257  */
258 static void rfcomm_sock_close(struct sock *sk)
259 {
260 	lock_sock(sk);
261 	__rfcomm_sock_close(sk);
262 	release_sock(sk);
263 }
264 
265 static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
266 {
267 	struct rfcomm_pinfo *pi = rfcomm_pi(sk);
268 
269 	BT_DBG("sk %p", sk);
270 
271 	if (parent) {
272 		sk->sk_type = parent->sk_type;
273 		pi->link_mode = rfcomm_pi(parent)->link_mode;
274 	} else {
275 		pi->link_mode = 0;
276 	}
277 
278 	pi->dlc->link_mode = pi->link_mode;
279 }
280 
281 static struct proto rfcomm_proto = {
282 	.name		= "RFCOMM",
283 	.owner		= THIS_MODULE,
284 	.obj_size	= sizeof(struct rfcomm_pinfo)
285 };
286 
287 static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, gfp_t prio)
288 {
289 	struct rfcomm_dlc *d;
290 	struct sock *sk;
291 
292 	sk = sk_alloc(PF_BLUETOOTH, prio, &rfcomm_proto, 1);
293 	if (!sk)
294 		return NULL;
295 
296 	sock_init_data(sock, sk);
297 	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
298 
299 	d = rfcomm_dlc_alloc(prio);
300 	if (!d) {
301 		sk_free(sk);
302 		return NULL;
303 	}
304 
305 	d->data_ready   = rfcomm_sk_data_ready;
306 	d->state_change = rfcomm_sk_state_change;
307 
308 	rfcomm_pi(sk)->dlc = d;
309 	d->owner = sk;
310 
311 	sk->sk_destruct = rfcomm_sock_destruct;
312 	sk->sk_sndtimeo = RFCOMM_CONN_TIMEOUT;
313 
314 	sk->sk_sndbuf   = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
315 	sk->sk_rcvbuf   = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
316 
317 	sock_reset_flag(sk, SOCK_ZAPPED);
318 
319 	sk->sk_protocol = proto;
320 	sk->sk_state	= BT_OPEN;
321 
322 	bt_sock_link(&rfcomm_sk_list, sk);
323 
324 	BT_DBG("sk %p", sk);
325 	return sk;
326 }
327 
328 static int rfcomm_sock_create(struct socket *sock, int protocol)
329 {
330 	struct sock *sk;
331 
332 	BT_DBG("sock %p", sock);
333 
334 	sock->state = SS_UNCONNECTED;
335 
336 	if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
337 		return -ESOCKTNOSUPPORT;
338 
339 	sock->ops = &rfcomm_sock_ops;
340 
341 	if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
342 		return -ENOMEM;
343 
344 	rfcomm_sock_init(sk, NULL);
345 	return 0;
346 }
347 
348 static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
349 {
350 	struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
351 	struct sock *sk = sock->sk;
352 	int err = 0;
353 
354 	BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
355 
356 	if (!addr || addr->sa_family != AF_BLUETOOTH)
357 		return -EINVAL;
358 
359 	lock_sock(sk);
360 
361 	if (sk->sk_state != BT_OPEN) {
362 		err = -EBADFD;
363 		goto done;
364 	}
365 
366 	if (sk->sk_type != SOCK_STREAM) {
367 		err = -EINVAL;
368 		goto done;
369 	}
370 
371 	write_lock_bh(&rfcomm_sk_list.lock);
372 
373 	if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
374 		err = -EADDRINUSE;
375 	} else {
376 		/* Save source address */
377 		bacpy(&bt_sk(sk)->src, &sa->rc_bdaddr);
378 		rfcomm_pi(sk)->channel = sa->rc_channel;
379 		sk->sk_state = BT_BOUND;
380 	}
381 
382 	write_unlock_bh(&rfcomm_sk_list.lock);
383 
384 done:
385 	release_sock(sk);
386 	return err;
387 }
388 
389 static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
390 {
391 	struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
392 	struct sock *sk = sock->sk;
393 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
394 	int err = 0;
395 
396 	BT_DBG("sk %p", sk);
397 
398 	if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
399 		return -EINVAL;
400 
401 	lock_sock(sk);
402 
403 	if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
404 		err = -EBADFD;
405 		goto done;
406 	}
407 
408 	if (sk->sk_type != SOCK_STREAM) {
409 		err = -EINVAL;
410 		goto done;
411 	}
412 
413 	sk->sk_state = BT_CONNECT;
414 	bacpy(&bt_sk(sk)->dst, &sa->rc_bdaddr);
415 	rfcomm_pi(sk)->channel = sa->rc_channel;
416 
417 	err = rfcomm_dlc_open(d, &bt_sk(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
418 	if (!err)
419 		err = bt_sock_wait_state(sk, BT_CONNECTED,
420 				sock_sndtimeo(sk, flags & O_NONBLOCK));
421 
422 done:
423 	release_sock(sk);
424 	return err;
425 }
426 
427 static int rfcomm_sock_listen(struct socket *sock, int backlog)
428 {
429 	struct sock *sk = sock->sk;
430 	int err = 0;
431 
432 	BT_DBG("sk %p backlog %d", sk, backlog);
433 
434 	lock_sock(sk);
435 
436 	if (sk->sk_state != BT_BOUND) {
437 		err = -EBADFD;
438 		goto done;
439 	}
440 
441 	if (sk->sk_type != SOCK_STREAM) {
442 		err = -EINVAL;
443 		goto done;
444 	}
445 
446 	if (!rfcomm_pi(sk)->channel) {
447 		bdaddr_t *src = &bt_sk(sk)->src;
448 		u8 channel;
449 
450 		err = -EINVAL;
451 
452 		write_lock_bh(&rfcomm_sk_list.lock);
453 
454 		for (channel = 1; channel < 31; channel++)
455 			if (!__rfcomm_get_sock_by_addr(channel, src)) {
456 				rfcomm_pi(sk)->channel = channel;
457 				err = 0;
458 				break;
459 			}
460 
461 		write_unlock_bh(&rfcomm_sk_list.lock);
462 
463 		if (err < 0)
464 			goto done;
465 	}
466 
467 	sk->sk_max_ack_backlog = backlog;
468 	sk->sk_ack_backlog = 0;
469 	sk->sk_state = BT_LISTEN;
470 
471 done:
472 	release_sock(sk);
473 	return err;
474 }
475 
476 static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
477 {
478 	DECLARE_WAITQUEUE(wait, current);
479 	struct sock *sk = sock->sk, *nsk;
480 	long timeo;
481 	int err = 0;
482 
483 	lock_sock(sk);
484 
485 	if (sk->sk_state != BT_LISTEN) {
486 		err = -EBADFD;
487 		goto done;
488 	}
489 
490 	if (sk->sk_type != SOCK_STREAM) {
491 		err = -EINVAL;
492 		goto done;
493 	}
494 
495 	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
496 
497 	BT_DBG("sk %p timeo %ld", sk, timeo);
498 
499 	/* Wait for an incoming connection. (wake-one). */
500 	add_wait_queue_exclusive(sk->sk_sleep, &wait);
501 	while (!(nsk = bt_accept_dequeue(sk, newsock))) {
502 		set_current_state(TASK_INTERRUPTIBLE);
503 		if (!timeo) {
504 			err = -EAGAIN;
505 			break;
506 		}
507 
508 		release_sock(sk);
509 		timeo = schedule_timeout(timeo);
510 		lock_sock(sk);
511 
512 		if (sk->sk_state != BT_LISTEN) {
513 			err = -EBADFD;
514 			break;
515 		}
516 
517 		if (signal_pending(current)) {
518 			err = sock_intr_errno(timeo);
519 			break;
520 		}
521 	}
522 	set_current_state(TASK_RUNNING);
523 	remove_wait_queue(sk->sk_sleep, &wait);
524 
525 	if (err)
526 		goto done;
527 
528 	newsock->state = SS_CONNECTED;
529 
530 	BT_DBG("new socket %p", nsk);
531 
532 done:
533 	release_sock(sk);
534 	return err;
535 }
536 
537 static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
538 {
539 	struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
540 	struct sock *sk = sock->sk;
541 
542 	BT_DBG("sock %p, sk %p", sock, sk);
543 
544 	sa->rc_family  = AF_BLUETOOTH;
545 	sa->rc_channel = rfcomm_pi(sk)->channel;
546 	if (peer)
547 		bacpy(&sa->rc_bdaddr, &bt_sk(sk)->dst);
548 	else
549 		bacpy(&sa->rc_bdaddr, &bt_sk(sk)->src);
550 
551 	*len = sizeof(struct sockaddr_rc);
552 	return 0;
553 }
554 
555 static int rfcomm_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
556 			       struct msghdr *msg, size_t len)
557 {
558 	struct sock *sk = sock->sk;
559 	struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
560 	struct sk_buff *skb;
561 	int err;
562 	int sent = 0;
563 
564 	if (msg->msg_flags & MSG_OOB)
565 		return -EOPNOTSUPP;
566 
567 	if (sk->sk_shutdown & SEND_SHUTDOWN)
568 		return -EPIPE;
569 
570 	BT_DBG("sock %p, sk %p", sock, sk);
571 
572 	lock_sock(sk);
573 
574 	while (len) {
575 		size_t size = min_t(size_t, len, d->mtu);
576 
577 		skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
578 				msg->msg_flags & MSG_DONTWAIT, &err);
579 		if (!skb)
580 			break;
581 		skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
582 
583 		err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
584 		if (err) {
585 			kfree_skb(skb);
586 			sent = err;
587 			break;
588 		}
589 
590 		err = rfcomm_dlc_send(d, skb);
591 		if (err < 0) {
592 			kfree_skb(skb);
593 			break;
594 		}
595 
596 		sent += size;
597 		len  -= size;
598 	}
599 
600 	release_sock(sk);
601 
602 	return sent ? sent : err;
603 }
604 
605 static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
606 {
607 	DECLARE_WAITQUEUE(wait, current);
608 
609 	add_wait_queue(sk->sk_sleep, &wait);
610 	for (;;) {
611 		set_current_state(TASK_INTERRUPTIBLE);
612 
613 		if (!skb_queue_empty(&sk->sk_receive_queue) ||
614 		    sk->sk_err ||
615 		    (sk->sk_shutdown & RCV_SHUTDOWN) ||
616 		    signal_pending(current) ||
617 		    !timeo)
618 			break;
619 
620 		set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
621 		release_sock(sk);
622 		timeo = schedule_timeout(timeo);
623 		lock_sock(sk);
624 		clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
625 	}
626 
627 	__set_current_state(TASK_RUNNING);
628 	remove_wait_queue(sk->sk_sleep, &wait);
629 	return timeo;
630 }
631 
632 static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
633 			       struct msghdr *msg, size_t size, int flags)
634 {
635 	struct sock *sk = sock->sk;
636 	int err = 0;
637 	size_t target, copied = 0;
638 	long timeo;
639 
640 	if (flags & MSG_OOB)
641 		return -EOPNOTSUPP;
642 
643 	msg->msg_namelen = 0;
644 
645 	BT_DBG("sk %p size %d", sk, size);
646 
647 	lock_sock(sk);
648 
649 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
650 	timeo  = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
651 
652 	do {
653 		struct sk_buff *skb;
654 		int chunk;
655 
656 		skb = skb_dequeue(&sk->sk_receive_queue);
657 		if (!skb) {
658 			if (copied >= target)
659 				break;
660 
661 			if ((err = sock_error(sk)) != 0)
662 				break;
663 			if (sk->sk_shutdown & RCV_SHUTDOWN)
664 				break;
665 
666 			err = -EAGAIN;
667 			if (!timeo)
668 				break;
669 
670 			timeo = rfcomm_sock_data_wait(sk, timeo);
671 
672 			if (signal_pending(current)) {
673 				err = sock_intr_errno(timeo);
674 				goto out;
675 			}
676 			continue;
677 		}
678 
679 		chunk = min_t(unsigned int, skb->len, size);
680 		if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
681 			skb_queue_head(&sk->sk_receive_queue, skb);
682 			if (!copied)
683 				copied = -EFAULT;
684 			break;
685 		}
686 		copied += chunk;
687 		size   -= chunk;
688 
689 		if (!(flags & MSG_PEEK)) {
690 			atomic_sub(chunk, &sk->sk_rmem_alloc);
691 
692 			skb_pull(skb, chunk);
693 			if (skb->len) {
694 				skb_queue_head(&sk->sk_receive_queue, skb);
695 				break;
696 			}
697 			kfree_skb(skb);
698 
699 		} else {
700 			/* put message back and return */
701 			skb_queue_head(&sk->sk_receive_queue, skb);
702 			break;
703 		}
704 	} while (size);
705 
706 out:
707 	if (atomic_read(&sk->sk_rmem_alloc) <= (sk->sk_rcvbuf >> 2))
708 		rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
709 
710 	release_sock(sk);
711 	return copied ? : err;
712 }
713 
714 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
715 {
716 	struct sock *sk = sock->sk;
717 	int err = 0;
718 	u32 opt;
719 
720 	BT_DBG("sk %p", sk);
721 
722 	lock_sock(sk);
723 
724 	switch (optname) {
725 	case RFCOMM_LM:
726 		if (get_user(opt, (u32 __user *) optval)) {
727 			err = -EFAULT;
728 			break;
729 		}
730 
731 		rfcomm_pi(sk)->link_mode = opt;
732 		break;
733 
734 	default:
735 		err = -ENOPROTOOPT;
736 		break;
737 	}
738 
739 	release_sock(sk);
740 	return err;
741 }
742 
743 static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
744 {
745 	struct sock *sk = sock->sk;
746 	struct sock *l2cap_sk;
747 	struct rfcomm_conninfo cinfo;
748 	int len, err = 0;
749 
750 	BT_DBG("sk %p", sk);
751 
752 	if (get_user(len, optlen))
753 		return -EFAULT;
754 
755 	lock_sock(sk);
756 
757 	switch (optname) {
758 	case RFCOMM_LM:
759 		if (put_user(rfcomm_pi(sk)->link_mode, (u32 __user *) optval))
760 			err = -EFAULT;
761 		break;
762 
763 	case RFCOMM_CONNINFO:
764 		if (sk->sk_state != BT_CONNECTED) {
765 			err = -ENOTCONN;
766 			break;
767 		}
768 
769 		l2cap_sk = rfcomm_pi(sk)->dlc->session->sock->sk;
770 
771 		cinfo.hci_handle = l2cap_pi(l2cap_sk)->conn->hcon->handle;
772 		memcpy(cinfo.dev_class, l2cap_pi(l2cap_sk)->conn->hcon->dev_class, 3);
773 
774 		len = min_t(unsigned int, len, sizeof(cinfo));
775 		if (copy_to_user(optval, (char *) &cinfo, len))
776 			err = -EFAULT;
777 
778 		break;
779 
780 	default:
781 		err = -ENOPROTOOPT;
782 		break;
783 	}
784 
785 	release_sock(sk);
786 	return err;
787 }
788 
789 static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
790 {
791 	struct sock *sk = sock->sk;
792 	int err;
793 
794 	lock_sock(sk);
795 
796 #ifdef CONFIG_BT_RFCOMM_TTY
797 	err = rfcomm_dev_ioctl(sk, cmd, (void __user *)arg);
798 #else
799 	err = -EOPNOTSUPP;
800 #endif
801 
802 	release_sock(sk);
803 	return err;
804 }
805 
806 static int rfcomm_sock_shutdown(struct socket *sock, int how)
807 {
808 	struct sock *sk = sock->sk;
809 	int err = 0;
810 
811 	BT_DBG("sock %p, sk %p", sock, sk);
812 
813 	if (!sk) return 0;
814 
815 	lock_sock(sk);
816 	if (!sk->sk_shutdown) {
817 		sk->sk_shutdown = SHUTDOWN_MASK;
818 		__rfcomm_sock_close(sk);
819 
820 		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
821 			err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
822 	}
823 	release_sock(sk);
824 	return err;
825 }
826 
827 static int rfcomm_sock_release(struct socket *sock)
828 {
829 	struct sock *sk = sock->sk;
830 	int err;
831 
832 	BT_DBG("sock %p, sk %p", sock, sk);
833 
834 	if (!sk)
835 		return 0;
836 
837 	err = rfcomm_sock_shutdown(sock, 2);
838 
839 	sock_orphan(sk);
840 	rfcomm_sock_kill(sk);
841 	return err;
842 }
843 
844 /* ---- RFCOMM core layer callbacks ----
845  *
846  * called under rfcomm_lock()
847  */
848 int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
849 {
850 	struct sock *sk, *parent;
851 	bdaddr_t src, dst;
852 	int result = 0;
853 
854 	BT_DBG("session %p channel %d", s, channel);
855 
856 	rfcomm_session_getaddr(s, &src, &dst);
857 
858 	/* Check if we have socket listening on channel */
859 	parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
860 	if (!parent)
861 		return 0;
862 
863 	/* Check for backlog size */
864 	if (sk_acceptq_is_full(parent)) {
865 		BT_DBG("backlog full %d", parent->sk_ack_backlog);
866 		goto done;
867 	}
868 
869 	sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
870 	if (!sk)
871 		goto done;
872 
873 	rfcomm_sock_init(sk, parent);
874 	bacpy(&bt_sk(sk)->src, &src);
875 	bacpy(&bt_sk(sk)->dst, &dst);
876 	rfcomm_pi(sk)->channel = channel;
877 
878 	sk->sk_state = BT_CONFIG;
879 	bt_accept_enqueue(parent, sk);
880 
881 	/* Accept connection and return socket DLC */
882 	*d = rfcomm_pi(sk)->dlc;
883 	result = 1;
884 
885 done:
886 	bh_unlock_sock(parent);
887 	return result;
888 }
889 
890 /* ---- Proc fs support ---- */
891 #ifdef CONFIG_PROC_FS
892 static void *rfcomm_seq_start(struct seq_file *seq, loff_t *pos)
893 {
894 	struct sock *sk;
895 	struct hlist_node *node;
896 	loff_t l = *pos;
897 
898 	read_lock_bh(&rfcomm_sk_list.lock);
899 
900 	sk_for_each(sk, node, &rfcomm_sk_list.head)
901 		if (!l--)
902 			return sk;
903 	return NULL;
904 }
905 
906 static void *rfcomm_seq_next(struct seq_file *seq, void *e, loff_t *pos)
907 {
908 	struct sock *sk = e;
909 	(*pos)++;
910 	return sk_next(sk);
911 }
912 
913 static void rfcomm_seq_stop(struct seq_file *seq, void *e)
914 {
915 	read_unlock_bh(&rfcomm_sk_list.lock);
916 }
917 
918 static int  rfcomm_seq_show(struct seq_file *seq, void *e)
919 {
920 	struct sock *sk = e;
921 	seq_printf(seq, "%s %s %d %d\n",
922 			batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst),
923 			sk->sk_state, rfcomm_pi(sk)->channel);
924 	return 0;
925 }
926 
927 static struct seq_operations rfcomm_seq_ops = {
928 	.start  = rfcomm_seq_start,
929 	.next   = rfcomm_seq_next,
930 	.stop   = rfcomm_seq_stop,
931 	.show   = rfcomm_seq_show
932 };
933 
934 static int rfcomm_seq_open(struct inode *inode, struct file *file)
935 {
936 	return seq_open(file, &rfcomm_seq_ops);
937 }
938 
939 static struct file_operations rfcomm_seq_fops = {
940 	.owner	 = THIS_MODULE,
941 	.open    = rfcomm_seq_open,
942 	.read    = seq_read,
943 	.llseek  = seq_lseek,
944 	.release = seq_release,
945 };
946 
947 static int  __init rfcomm_sock_proc_init(void)
948 {
949         struct proc_dir_entry *p = create_proc_entry("sock", S_IRUGO, proc_bt_rfcomm);
950         if (!p)
951                 return -ENOMEM;
952         p->proc_fops = &rfcomm_seq_fops;
953         return 0;
954 }
955 
956 static void __exit rfcomm_sock_proc_cleanup(void)
957 {
958         remove_proc_entry("sock", proc_bt_rfcomm);
959 }
960 
961 #else /* CONFIG_PROC_FS */
962 
963 static int  __init rfcomm_sock_proc_init(void)
964 {
965         return 0;
966 }
967 
968 static void __exit rfcomm_sock_proc_cleanup(void)
969 {
970         return;
971 }
972 #endif /* CONFIG_PROC_FS */
973 
974 static struct proto_ops rfcomm_sock_ops = {
975 	.family		= PF_BLUETOOTH,
976 	.owner		= THIS_MODULE,
977 	.release	= rfcomm_sock_release,
978 	.bind		= rfcomm_sock_bind,
979 	.connect	= rfcomm_sock_connect,
980 	.listen		= rfcomm_sock_listen,
981 	.accept		= rfcomm_sock_accept,
982 	.getname	= rfcomm_sock_getname,
983 	.sendmsg	= rfcomm_sock_sendmsg,
984 	.recvmsg	= rfcomm_sock_recvmsg,
985 	.shutdown	= rfcomm_sock_shutdown,
986 	.setsockopt	= rfcomm_sock_setsockopt,
987 	.getsockopt	= rfcomm_sock_getsockopt,
988 	.ioctl		= rfcomm_sock_ioctl,
989 	.poll		= bt_sock_poll,
990 	.socketpair	= sock_no_socketpair,
991 	.mmap		= sock_no_mmap
992 };
993 
994 static struct net_proto_family rfcomm_sock_family_ops = {
995 	.family		= PF_BLUETOOTH,
996 	.owner		= THIS_MODULE,
997 	.create		= rfcomm_sock_create
998 };
999 
1000 int  __init rfcomm_init_sockets(void)
1001 {
1002 	int err;
1003 
1004 	err = proto_register(&rfcomm_proto, 0);
1005 	if (err < 0)
1006 		return err;
1007 
1008 	err = bt_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops);
1009 	if (err < 0)
1010 		goto error;
1011 
1012 	rfcomm_sock_proc_init();
1013 
1014 	BT_INFO("RFCOMM socket layer initialized");
1015 
1016 	return 0;
1017 
1018 error:
1019 	BT_ERR("RFCOMM socket layer registration failed");
1020 	proto_unregister(&rfcomm_proto);
1021 	return err;
1022 }
1023 
1024 void __exit rfcomm_cleanup_sockets(void)
1025 {
1026 	rfcomm_sock_proc_cleanup();
1027 
1028 	if (bt_sock_unregister(BTPROTO_RFCOMM) < 0)
1029 		BT_ERR("RFCOMM socket layer unregistration failed");
1030 
1031 	proto_unregister(&rfcomm_proto);
1032 }
1033