l2cap_sock.c revision c47b7c724bc7106acf602b2ce99922a2d14ea62b
1/*
2   BlueZ - Bluetooth protocol stack for Linux
3   Copyright (C) 2000-2001 Qualcomm Incorporated
4   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5   Copyright (C) 2010 Google Inc.
6
7   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License version 2 as
11   published by the Free Software Foundation;
12
13   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21
22   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24   SOFTWARE IS DISCLAIMED.
25*/
26
27/* Bluetooth L2CAP sockets. */
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/l2cap.h>
31
32static void l2cap_sock_timeout(unsigned long arg)
33{
34	struct sock *sk = (struct sock *) arg;
35	int reason;
36
37	BT_DBG("sock %p state %d", sk, sk->sk_state);
38
39	bh_lock_sock(sk);
40
41	if (sock_owned_by_user(sk)) {
42		/* sk is owned by user. Try again later */
43		l2cap_sock_set_timer(sk, HZ / 5);
44		bh_unlock_sock(sk);
45		sock_put(sk);
46		return;
47	}
48
49	if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
50		reason = ECONNREFUSED;
51	else if (sk->sk_state == BT_CONNECT &&
52				l2cap_pi(sk)->sec_level != BT_SECURITY_SDP)
53		reason = ECONNREFUSED;
54	else
55		reason = ETIMEDOUT;
56
57	__l2cap_sock_close(sk, reason);
58
59	bh_unlock_sock(sk);
60
61	l2cap_sock_kill(sk);
62	sock_put(sk);
63}
64
65static struct sock *__l2cap_get_sock_by_addr(__le16 psm, bdaddr_t *src)
66{
67	struct sock *sk;
68	struct hlist_node *node;
69	sk_for_each(sk, node, &l2cap_sk_list.head)
70		if (l2cap_pi(sk)->sport == psm && !bacmp(&bt_sk(sk)->src, src))
71			goto found;
72	sk = NULL;
73found:
74	return sk;
75}
76
77static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
78{
79	struct sock *sk = sock->sk;
80	struct sockaddr_l2 la;
81	int len, err = 0;
82
83	BT_DBG("sk %p", sk);
84
85	if (!addr || addr->sa_family != AF_BLUETOOTH)
86		return -EINVAL;
87
88	memset(&la, 0, sizeof(la));
89	len = min_t(unsigned int, sizeof(la), alen);
90	memcpy(&la, addr, len);
91
92	if (la.l2_cid)
93		return -EINVAL;
94
95	lock_sock(sk);
96
97	if (sk->sk_state != BT_OPEN) {
98		err = -EBADFD;
99		goto done;
100	}
101
102	if (la.l2_psm) {
103		__u16 psm = __le16_to_cpu(la.l2_psm);
104
105		/* PSM must be odd and lsb of upper byte must be 0 */
106		if ((psm & 0x0101) != 0x0001) {
107			err = -EINVAL;
108			goto done;
109		}
110
111		/* Restrict usage of well-known PSMs */
112		if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
113			err = -EACCES;
114			goto done;
115		}
116	}
117
118	write_lock_bh(&l2cap_sk_list.lock);
119
120	if (la.l2_psm && __l2cap_get_sock_by_addr(la.l2_psm, &la.l2_bdaddr)) {
121		err = -EADDRINUSE;
122	} else {
123		/* Save source address */
124		bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
125		l2cap_pi(sk)->psm   = la.l2_psm;
126		l2cap_pi(sk)->sport = la.l2_psm;
127		sk->sk_state = BT_BOUND;
128
129		if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
130					__le16_to_cpu(la.l2_psm) == 0x0003)
131			l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
132	}
133
134	write_unlock_bh(&l2cap_sk_list.lock);
135
136done:
137	release_sock(sk);
138	return err;
139}
140
141static int l2cap_sock_listen(struct socket *sock, int backlog)
142{
143	struct sock *sk = sock->sk;
144	int err = 0;
145
146	BT_DBG("sk %p backlog %d", sk, backlog);
147
148	lock_sock(sk);
149
150	if ((sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM)
151			|| sk->sk_state != BT_BOUND) {
152		err = -EBADFD;
153		goto done;
154	}
155
156	switch (l2cap_pi(sk)->mode) {
157	case L2CAP_MODE_BASIC:
158		break;
159	case L2CAP_MODE_ERTM:
160	case L2CAP_MODE_STREAMING:
161		if (!disable_ertm)
162			break;
163		/* fall through */
164	default:
165		err = -ENOTSUPP;
166		goto done;
167	}
168
169	if (!l2cap_pi(sk)->psm) {
170		bdaddr_t *src = &bt_sk(sk)->src;
171		u16 psm;
172
173		err = -EINVAL;
174
175		write_lock_bh(&l2cap_sk_list.lock);
176
177		for (psm = 0x1001; psm < 0x1100; psm += 2)
178			if (!__l2cap_get_sock_by_addr(cpu_to_le16(psm), src)) {
179				l2cap_pi(sk)->psm   = cpu_to_le16(psm);
180				l2cap_pi(sk)->sport = cpu_to_le16(psm);
181				err = 0;
182				break;
183			}
184
185		write_unlock_bh(&l2cap_sk_list.lock);
186
187		if (err < 0)
188			goto done;
189	}
190
191	sk->sk_max_ack_backlog = backlog;
192	sk->sk_ack_backlog = 0;
193	sk->sk_state = BT_LISTEN;
194
195done:
196	release_sock(sk);
197	return err;
198}
199
200static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
201{
202	DECLARE_WAITQUEUE(wait, current);
203	struct sock *sk = sock->sk, *nsk;
204	long timeo;
205	int err = 0;
206
207	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
208
209	if (sk->sk_state != BT_LISTEN) {
210		err = -EBADFD;
211		goto done;
212	}
213
214	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
215
216	BT_DBG("sk %p timeo %ld", sk, timeo);
217
218	/* Wait for an incoming connection. (wake-one). */
219	add_wait_queue_exclusive(sk_sleep(sk), &wait);
220	while (!(nsk = bt_accept_dequeue(sk, newsock))) {
221		set_current_state(TASK_INTERRUPTIBLE);
222		if (!timeo) {
223			err = -EAGAIN;
224			break;
225		}
226
227		release_sock(sk);
228		timeo = schedule_timeout(timeo);
229		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
230
231		if (sk->sk_state != BT_LISTEN) {
232			err = -EBADFD;
233			break;
234		}
235
236		if (signal_pending(current)) {
237			err = sock_intr_errno(timeo);
238			break;
239		}
240	}
241	set_current_state(TASK_RUNNING);
242	remove_wait_queue(sk_sleep(sk), &wait);
243
244	if (err)
245		goto done;
246
247	newsock->state = SS_CONNECTED;
248
249	BT_DBG("new socket %p", nsk);
250
251done:
252	release_sock(sk);
253	return err;
254}
255
256static int l2cap_sock_release(struct socket *sock)
257{
258	struct sock *sk = sock->sk;
259	int err;
260
261	BT_DBG("sock %p, sk %p", sock, sk);
262
263	if (!sk)
264		return 0;
265
266	err = l2cap_sock_shutdown(sock, 2);
267
268	sock_orphan(sk);
269	l2cap_sock_kill(sk);
270	return err;
271}
272
273static void l2cap_sock_destruct(struct sock *sk)
274{
275	BT_DBG("sk %p", sk);
276
277	skb_queue_purge(&sk->sk_receive_queue);
278	skb_queue_purge(&sk->sk_write_queue);
279}
280
281void l2cap_sock_init(struct sock *sk, struct sock *parent)
282{
283	struct l2cap_pinfo *pi = l2cap_pi(sk);
284
285	BT_DBG("sk %p", sk);
286
287	if (parent) {
288		sk->sk_type = parent->sk_type;
289		bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
290
291		pi->imtu = l2cap_pi(parent)->imtu;
292		pi->omtu = l2cap_pi(parent)->omtu;
293		pi->conf_state = l2cap_pi(parent)->conf_state;
294		pi->mode = l2cap_pi(parent)->mode;
295		pi->fcs  = l2cap_pi(parent)->fcs;
296		pi->max_tx = l2cap_pi(parent)->max_tx;
297		pi->tx_win = l2cap_pi(parent)->tx_win;
298		pi->sec_level = l2cap_pi(parent)->sec_level;
299		pi->role_switch = l2cap_pi(parent)->role_switch;
300		pi->force_reliable = l2cap_pi(parent)->force_reliable;
301		pi->flushable = l2cap_pi(parent)->flushable;
302	} else {
303		pi->imtu = L2CAP_DEFAULT_MTU;
304		pi->omtu = 0;
305		if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
306			pi->mode = L2CAP_MODE_ERTM;
307			pi->conf_state |= L2CAP_CONF_STATE2_DEVICE;
308		} else {
309			pi->mode = L2CAP_MODE_BASIC;
310		}
311		pi->max_tx = L2CAP_DEFAULT_MAX_TX;
312		pi->fcs  = L2CAP_FCS_CRC16;
313		pi->tx_win = L2CAP_DEFAULT_TX_WINDOW;
314		pi->sec_level = BT_SECURITY_LOW;
315		pi->role_switch = 0;
316		pi->force_reliable = 0;
317		pi->flushable = BT_FLUSHABLE_OFF;
318	}
319
320	/* Default config options */
321	pi->conf_len = 0;
322	pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
323	skb_queue_head_init(TX_QUEUE(sk));
324	skb_queue_head_init(SREJ_QUEUE(sk));
325	skb_queue_head_init(BUSY_QUEUE(sk));
326	INIT_LIST_HEAD(SREJ_LIST(sk));
327}
328
329static struct proto l2cap_proto = {
330	.name		= "L2CAP",
331	.owner		= THIS_MODULE,
332	.obj_size	= sizeof(struct l2cap_pinfo)
333};
334
335struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
336{
337	struct sock *sk;
338
339	sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
340	if (!sk)
341		return NULL;
342
343	sock_init_data(sock, sk);
344	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
345
346	sk->sk_destruct = l2cap_sock_destruct;
347	sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT);
348
349	sock_reset_flag(sk, SOCK_ZAPPED);
350
351	sk->sk_protocol = proto;
352	sk->sk_state = BT_OPEN;
353
354	setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk);
355
356	bt_sock_link(&l2cap_sk_list, sk);
357	return sk;
358}
359
360static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
361			     int kern)
362{
363	struct sock *sk;
364
365	BT_DBG("sock %p", sock);
366
367	sock->state = SS_UNCONNECTED;
368
369	if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
370			sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
371		return -ESOCKTNOSUPPORT;
372
373	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
374		return -EPERM;
375
376	sock->ops = &l2cap_sock_ops;
377
378	sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
379	if (!sk)
380		return -ENOMEM;
381
382	l2cap_sock_init(sk, NULL);
383	return 0;
384}
385
386const struct proto_ops l2cap_sock_ops = {
387	.family		= PF_BLUETOOTH,
388	.owner		= THIS_MODULE,
389	.release	= l2cap_sock_release,
390	.bind		= l2cap_sock_bind,
391	.connect	= l2cap_sock_connect,
392	.listen		= l2cap_sock_listen,
393	.accept		= l2cap_sock_accept,
394	.getname	= l2cap_sock_getname,
395	.sendmsg	= l2cap_sock_sendmsg,
396	.recvmsg	= l2cap_sock_recvmsg,
397	.poll		= bt_sock_poll,
398	.ioctl		= bt_sock_ioctl,
399	.mmap		= sock_no_mmap,
400	.socketpair	= sock_no_socketpair,
401	.shutdown	= l2cap_sock_shutdown,
402	.setsockopt	= l2cap_sock_setsockopt,
403	.getsockopt	= l2cap_sock_getsockopt
404};
405
406static const struct net_proto_family l2cap_sock_family_ops = {
407	.family	= PF_BLUETOOTH,
408	.owner	= THIS_MODULE,
409	.create	= l2cap_sock_create,
410};
411
412int __init l2cap_init_sockets(void)
413{
414       int err;
415
416       err = proto_register(&l2cap_proto, 0);
417       if (err < 0)
418               return err;
419
420       err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
421       if (err < 0)
422               goto error;
423
424       BT_INFO("L2CAP socket layer initialized");
425
426       return 0;
427
428error:
429       BT_ERR("L2CAP socket registration failed");
430       proto_unregister(&l2cap_proto);
431       return err;
432}
433
434void l2cap_cleanup_sockets(void)
435{
436       if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
437               BT_ERR("L2CAP socket unregistration failed");
438
439       proto_unregister(&l2cap_proto);
440}
441