Bluetooth: Move idle_timeout and sniff_{min,max}_interval to hci_core.c
[deliverable/linux.git] / net / bluetooth / l2cap_sock.c
CommitLineData
bb58f747
GP
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.
590051de 6 Copyright (C) 2011 ProFUSION Embedded Systems
bb58f747
GP
7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation;
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25 SOFTWARE IS DISCLAIMED.
26*/
27
28/* Bluetooth L2CAP sockets. */
29
bc3b2d7f 30#include <linux/export.h>
6230c9b4 31
bb58f747 32#include <net/bluetooth/bluetooth.h>
33575df7 33#include <net/bluetooth/hci_core.h>
bb58f747 34#include <net/bluetooth/l2cap.h>
ac4b7236
MH
35
36#include "smp.h"
bb58f747 37
5b28d95c
MY
38static struct bt_sock_list l2cap_sk_list = {
39 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
40};
41
cf2f90f5 42static const struct proto_ops l2cap_sock_ops;
80808e43 43static void l2cap_sock_init(struct sock *sk, struct sock *parent);
2d792818
GP
44static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
45 int proto, gfp_t prio);
cf2f90f5 46
b3916db3
DH
47bool l2cap_is_socket(struct socket *sock)
48{
49 return sock && sock->ops == &l2cap_sock_ops;
50}
51EXPORT_SYMBOL(l2cap_is_socket);
52
af6bcd82
GP
53static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
54{
55 struct sock *sk = sock->sk;
4343478f 56 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
57 struct sockaddr_l2 la;
58 int len, err = 0;
59
60 BT_DBG("sk %p", sk);
61
62 if (!addr || addr->sa_family != AF_BLUETOOTH)
63 return -EINVAL;
64
65 memset(&la, 0, sizeof(la));
66 len = min_t(unsigned int, sizeof(la), alen);
67 memcpy(&la, addr, len);
68
b62f328b 69 if (la.l2_cid && la.l2_psm)
af6bcd82
GP
70 return -EINVAL;
71
80c1a2e7
JH
72 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
73 return -EINVAL;
74
bfe4655f
JH
75 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
76 /* Connection oriented channels are not supported on LE */
77 if (la.l2_psm)
78 return -EINVAL;
79 /* We only allow ATT user space socket */
7f59ddad 80 if (la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
bfe4655f
JH
81 return -EINVAL;
82 }
83
af6bcd82
GP
84 lock_sock(sk);
85
86 if (sk->sk_state != BT_OPEN) {
87 err = -EBADFD;
88 goto done;
89 }
90
91 if (la.l2_psm) {
92 __u16 psm = __le16_to_cpu(la.l2_psm);
93
94 /* PSM must be odd and lsb of upper byte must be 0 */
95 if ((psm & 0x0101) != 0x0001) {
96 err = -EINVAL;
97 goto done;
98 }
99
100 /* Restrict usage of well-known PSMs */
101 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
102 err = -EACCES;
103 goto done;
104 }
105 }
106
9e4425ff 107 if (la.l2_cid)
6e4aff10 108 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
9e4425ff
GP
109 else
110 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
af6bcd82 111
9e4425ff
GP
112 if (err < 0)
113 goto done;
af6bcd82 114
6a974b50 115 switch (chan->chan_type) {
3124b843
MH
116 case L2CAP_CHAN_CONN_LESS:
117 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP)
118 chan->sec_level = BT_SECURITY_SDP;
119 break;
6a974b50
MH
120 case L2CAP_CHAN_CONN_ORIENTED:
121 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
122 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
123 chan->sec_level = BT_SECURITY_SDP;
124 break;
125 }
b62f328b 126
7eafc59e 127 bacpy(&chan->src, &la.l2_bdaddr);
4f1654e0 128 chan->src_type = la.l2_bdaddr_type;
89bc500e
GP
129
130 chan->state = BT_BOUND;
9e4425ff 131 sk->sk_state = BT_BOUND;
af6bcd82
GP
132
133done:
134 release_sock(sk);
135 return err;
136}
137
2d792818
GP
138static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
139 int alen, int flags)
4e34c50b
GP
140{
141 struct sock *sk = sock->sk;
0c1bc5c6 142 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
4e34c50b
GP
143 struct sockaddr_l2 la;
144 int len, err = 0;
145
146 BT_DBG("sk %p", sk);
147
148 if (!addr || alen < sizeof(addr->sa_family) ||
149 addr->sa_family != AF_BLUETOOTH)
150 return -EINVAL;
151
152 memset(&la, 0, sizeof(la));
153 len = min_t(unsigned int, sizeof(la), alen);
154 memcpy(&la, addr, len);
155
acd7d370 156 if (la.l2_cid && la.l2_psm)
4e34c50b
GP
157 return -EINVAL;
158
80c1a2e7
JH
159 if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
160 return -EINVAL;
161
1f209383
JH
162 if (chan->src_type == BDADDR_BREDR && la.l2_bdaddr_type != BDADDR_BREDR)
163 return -EINVAL;
164
165 if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR)
166 return -EINVAL;
167
bfe4655f
JH
168 if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
169 /* Connection oriented channels are not supported on LE */
170 if (la.l2_psm)
171 return -EINVAL;
172 /* We only allow ATT user space socket */
7f59ddad 173 if (la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
bfe4655f
JH
174 return -EINVAL;
175 }
176
6e4aff10 177 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
8e9f9892 178 &la.l2_bdaddr, la.l2_bdaddr_type);
4e34c50b 179 if (err)
b3fb611e 180 return err;
4e34c50b 181
6be36555
AE
182 lock_sock(sk);
183
4e34c50b 184 err = bt_sock_wait_state(sk, BT_CONNECTED,
2d792818 185 sock_sndtimeo(sk, flags & O_NONBLOCK));
b3fb611e
AE
186
187 release_sock(sk);
188
4e34c50b
GP
189 return err;
190}
191
af6bcd82
GP
192static int l2cap_sock_listen(struct socket *sock, int backlog)
193{
194 struct sock *sk = sock->sk;
0c1bc5c6 195 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
196 int err = 0;
197
198 BT_DBG("sk %p backlog %d", sk, backlog);
199
200 lock_sock(sk);
201
6b3af733 202 if (sk->sk_state != BT_BOUND) {
af6bcd82
GP
203 err = -EBADFD;
204 goto done;
205 }
206
6b3af733
MH
207 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
208 err = -EINVAL;
209 goto done;
210 }
211
0c1bc5c6 212 switch (chan->mode) {
af6bcd82
GP
213 case L2CAP_MODE_BASIC:
214 break;
215 case L2CAP_MODE_ERTM:
216 case L2CAP_MODE_STREAMING:
217 if (!disable_ertm)
218 break;
219 /* fall through */
220 default:
221 err = -ENOTSUPP;
222 goto done;
223 }
224
af6bcd82
GP
225 sk->sk_max_ack_backlog = backlog;
226 sk->sk_ack_backlog = 0;
89bc500e
GP
227
228 chan->state = BT_LISTEN;
af6bcd82
GP
229 sk->sk_state = BT_LISTEN;
230
231done:
232 release_sock(sk);
233 return err;
234}
235
2d792818
GP
236static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
237 int flags)
c47b7c72
GP
238{
239 DECLARE_WAITQUEUE(wait, current);
240 struct sock *sk = sock->sk, *nsk;
241 long timeo;
242 int err = 0;
243
244 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
245
c47b7c72
GP
246 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
247
248 BT_DBG("sk %p timeo %ld", sk, timeo);
249
250 /* Wait for an incoming connection. (wake-one). */
251 add_wait_queue_exclusive(sk_sleep(sk), &wait);
f9a3c20a 252 while (1) {
c47b7c72 253 set_current_state(TASK_INTERRUPTIBLE);
f9a3c20a
PH
254
255 if (sk->sk_state != BT_LISTEN) {
256 err = -EBADFD;
c47b7c72
GP
257 break;
258 }
259
f9a3c20a
PH
260 nsk = bt_accept_dequeue(sk, newsock);
261 if (nsk)
262 break;
c47b7c72 263
f9a3c20a
PH
264 if (!timeo) {
265 err = -EAGAIN;
c47b7c72
GP
266 break;
267 }
268
269 if (signal_pending(current)) {
270 err = sock_intr_errno(timeo);
271 break;
272 }
f9a3c20a
PH
273
274 release_sock(sk);
275 timeo = schedule_timeout(timeo);
276 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
c47b7c72 277 }
f9a3c20a 278 __set_current_state(TASK_RUNNING);
c47b7c72
GP
279 remove_wait_queue(sk_sleep(sk), &wait);
280
281 if (err)
282 goto done;
283
284 newsock->state = SS_CONNECTED;
285
286 BT_DBG("new socket %p", nsk);
287
288done:
289 release_sock(sk);
290 return err;
291}
292
2d792818
GP
293static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
294 int *len, int peer)
d7175d55
GP
295{
296 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
297 struct sock *sk = sock->sk;
0c1bc5c6 298 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
d7175d55
GP
299
300 BT_DBG("sock %p, sk %p", sock, sk);
301
792039c7 302 memset(la, 0, sizeof(struct sockaddr_l2));
d7175d55
GP
303 addr->sa_family = AF_BLUETOOTH;
304 *len = sizeof(struct sockaddr_l2);
305
306 if (peer) {
fe4128e0 307 la->l2_psm = chan->psm;
7eafc59e 308 bacpy(&la->l2_bdaddr, &chan->dst);
fe4128e0 309 la->l2_cid = cpu_to_le16(chan->dcid);
4f1654e0 310 la->l2_bdaddr_type = chan->dst_type;
d7175d55 311 } else {
0c1bc5c6 312 la->l2_psm = chan->sport;
7eafc59e 313 bacpy(&la->l2_bdaddr, &chan->src);
fe4128e0 314 la->l2_cid = cpu_to_le16(chan->scid);
4f1654e0 315 la->l2_bdaddr_type = chan->src_type;
d7175d55
GP
316 }
317
318 return 0;
319}
320
2d792818
GP
321static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
322 char __user *optval, int __user *optlen)
99f4808d
GP
323{
324 struct sock *sk = sock->sk;
4343478f 325 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d
GP
326 struct l2cap_options opts;
327 struct l2cap_conninfo cinfo;
328 int len, err = 0;
329 u32 opt;
330
331 BT_DBG("sk %p", sk);
332
333 if (get_user(len, optlen))
334 return -EFAULT;
335
336 lock_sock(sk);
337
338 switch (optname) {
339 case L2CAP_OPTIONS:
e3fb592b 340 memset(&opts, 0, sizeof(opts));
0c1bc5c6
GP
341 opts.imtu = chan->imtu;
342 opts.omtu = chan->omtu;
343 opts.flush_to = chan->flush_to;
344 opts.mode = chan->mode;
47d1ec61
GP
345 opts.fcs = chan->fcs;
346 opts.max_tx = chan->max_tx;
6327eb98 347 opts.txwin_size = chan->tx_win;
99f4808d
GP
348
349 len = min_t(unsigned int, len, sizeof(opts));
350 if (copy_to_user(optval, (char *) &opts, len))
351 err = -EFAULT;
352
353 break;
354
355 case L2CAP_LM:
4343478f 356 switch (chan->sec_level) {
99f4808d
GP
357 case BT_SECURITY_LOW:
358 opt = L2CAP_LM_AUTH;
359 break;
360 case BT_SECURITY_MEDIUM:
361 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
362 break;
363 case BT_SECURITY_HIGH:
364 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
2d792818 365 L2CAP_LM_SECURE;
99f4808d
GP
366 break;
367 default:
368 opt = 0;
369 break;
370 }
371
43bd0f32 372 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
99f4808d
GP
373 opt |= L2CAP_LM_MASTER;
374
ecf61bdb 375 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
99f4808d
GP
376 opt |= L2CAP_LM_RELIABLE;
377
378 if (put_user(opt, (u32 __user *) optval))
379 err = -EFAULT;
380 break;
381
382 case L2CAP_CONNINFO:
383 if (sk->sk_state != BT_CONNECTED &&
c5daa683
GP
384 !(sk->sk_state == BT_CONNECT2 &&
385 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
99f4808d
GP
386 err = -ENOTCONN;
387 break;
388 }
389
8d03e971 390 memset(&cinfo, 0, sizeof(cinfo));
8c1d787b
GP
391 cinfo.hci_handle = chan->conn->hcon->handle;
392 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
99f4808d
GP
393
394 len = min_t(unsigned int, len, sizeof(cinfo));
395 if (copy_to_user(optval, (char *) &cinfo, len))
396 err = -EFAULT;
397
398 break;
399
400 default:
401 err = -ENOPROTOOPT;
402 break;
403 }
404
405 release_sock(sk);
406 return err;
407}
408
2d792818
GP
409static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
410 char __user *optval, int __user *optlen)
99f4808d
GP
411{
412 struct sock *sk = sock->sk;
4343478f 413 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d 414 struct bt_security sec;
14b12d0b 415 struct bt_power pwr;
99f4808d
GP
416 int len, err = 0;
417
418 BT_DBG("sk %p", sk);
419
420 if (level == SOL_L2CAP)
421 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
422
423 if (level != SOL_BLUETOOTH)
424 return -ENOPROTOOPT;
425
426 if (get_user(len, optlen))
427 return -EFAULT;
428
429 lock_sock(sk);
430
431 switch (optname) {
432 case BT_SECURITY:
715ec005 433 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 434 chan->chan_type != L2CAP_CHAN_RAW) {
99f4808d
GP
435 err = -EINVAL;
436 break;
437 }
438
8f360119 439 memset(&sec, 0, sizeof(sec));
85e34368 440 if (chan->conn) {
c6585a4d 441 sec.level = chan->conn->hcon->sec_level;
99f4808d 442
85e34368
AE
443 if (sk->sk_state == BT_CONNECTED)
444 sec.key_size = chan->conn->hcon->enc_key_size;
445 } else {
446 sec.level = chan->sec_level;
447 }
8f360119 448
99f4808d
GP
449 len = min_t(unsigned int, len, sizeof(sec));
450 if (copy_to_user(optval, (char *) &sec, len))
451 err = -EFAULT;
452
453 break;
454
455 case BT_DEFER_SETUP:
456 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
457 err = -EINVAL;
458 break;
459 }
460
c5daa683
GP
461 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
462 (u32 __user *) optval))
99f4808d
GP
463 err = -EFAULT;
464
465 break;
466
467 case BT_FLUSHABLE:
d57b0e8b 468 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
2d792818 469 (u32 __user *) optval))
99f4808d
GP
470 err = -EFAULT;
471
472 break;
473
14b12d0b
JG
474 case BT_POWER:
475 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
2d792818 476 && sk->sk_type != SOCK_RAW) {
14b12d0b
JG
477 err = -EINVAL;
478 break;
479 }
480
15770b1a 481 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
482
483 len = min_t(unsigned int, len, sizeof(pwr));
484 if (copy_to_user(optval, (char *) &pwr, len))
485 err = -EFAULT;
486
487 break;
488
2ea66482 489 case BT_CHANNEL_POLICY:
2ea66482
MM
490 if (put_user(chan->chan_policy, (u32 __user *) optval))
491 err = -EFAULT;
492 break;
493
99f4808d
GP
494 default:
495 err = -ENOPROTOOPT;
496 break;
497 }
498
499 release_sock(sk);
500 return err;
501}
502
682877c3
AG
503static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
504{
505 switch (chan->scid) {
073d1cf3 506 case L2CAP_CID_ATT:
8c3a4f00 507 if (mtu < L2CAP_LE_MIN_MTU)
682877c3
AG
508 return false;
509 break;
510
511 default:
512 if (mtu < L2CAP_DEFAULT_MIN_MTU)
513 return false;
514 }
515
516 return true;
517}
518
2d792818
GP
519static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
520 char __user *optval, unsigned int optlen)
33575df7
GP
521{
522 struct sock *sk = sock->sk;
b4450035 523 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7
GP
524 struct l2cap_options opts;
525 int len, err = 0;
526 u32 opt;
527
528 BT_DBG("sk %p", sk);
529
530 lock_sock(sk);
531
532 switch (optname) {
533 case L2CAP_OPTIONS:
534 if (sk->sk_state == BT_CONNECTED) {
535 err = -EINVAL;
536 break;
537 }
538
0c1bc5c6
GP
539 opts.imtu = chan->imtu;
540 opts.omtu = chan->omtu;
541 opts.flush_to = chan->flush_to;
542 opts.mode = chan->mode;
47d1ec61
GP
543 opts.fcs = chan->fcs;
544 opts.max_tx = chan->max_tx;
6327eb98 545 opts.txwin_size = chan->tx_win;
33575df7
GP
546
547 len = min_t(unsigned int, sizeof(opts), optlen);
548 if (copy_from_user((char *) &opts, optval, len)) {
549 err = -EFAULT;
550 break;
551 }
552
6327eb98 553 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
33575df7
GP
554 err = -EINVAL;
555 break;
556 }
557
682877c3
AG
558 if (!l2cap_valid_mtu(chan, opts.imtu)) {
559 err = -EINVAL;
560 break;
561 }
562
0c1bc5c6
GP
563 chan->mode = opts.mode;
564 switch (chan->mode) {
33575df7 565 case L2CAP_MODE_BASIC:
c1360a1c 566 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
33575df7
GP
567 break;
568 case L2CAP_MODE_ERTM:
569 case L2CAP_MODE_STREAMING:
570 if (!disable_ertm)
571 break;
572 /* fall through */
573 default:
574 err = -EINVAL;
575 break;
576 }
577
0c1bc5c6
GP
578 chan->imtu = opts.imtu;
579 chan->omtu = opts.omtu;
47d1ec61
GP
580 chan->fcs = opts.fcs;
581 chan->max_tx = opts.max_tx;
6327eb98 582 chan->tx_win = opts.txwin_size;
12d59781 583 chan->flush_to = opts.flush_to;
33575df7
GP
584 break;
585
586 case L2CAP_LM:
587 if (get_user(opt, (u32 __user *) optval)) {
588 err = -EFAULT;
589 break;
590 }
591
592 if (opt & L2CAP_LM_AUTH)
4343478f 593 chan->sec_level = BT_SECURITY_LOW;
33575df7 594 if (opt & L2CAP_LM_ENCRYPT)
4343478f 595 chan->sec_level = BT_SECURITY_MEDIUM;
33575df7 596 if (opt & L2CAP_LM_SECURE)
4343478f 597 chan->sec_level = BT_SECURITY_HIGH;
33575df7 598
43bd0f32
AE
599 if (opt & L2CAP_LM_MASTER)
600 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
601 else
602 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
ecf61bdb
AE
603
604 if (opt & L2CAP_LM_RELIABLE)
605 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
606 else
607 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
33575df7
GP
608 break;
609
610 default:
611 err = -ENOPROTOOPT;
612 break;
613 }
614
615 release_sock(sk);
616 return err;
617}
618
2d792818
GP
619static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
620 char __user *optval, unsigned int optlen)
33575df7
GP
621{
622 struct sock *sk = sock->sk;
4343478f 623 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7 624 struct bt_security sec;
14b12d0b 625 struct bt_power pwr;
f1cb9af5 626 struct l2cap_conn *conn;
33575df7
GP
627 int len, err = 0;
628 u32 opt;
629
630 BT_DBG("sk %p", sk);
631
632 if (level == SOL_L2CAP)
633 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
634
635 if (level != SOL_BLUETOOTH)
636 return -ENOPROTOOPT;
637
638 lock_sock(sk);
639
640 switch (optname) {
641 case BT_SECURITY:
715ec005 642 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 643 chan->chan_type != L2CAP_CHAN_RAW) {
33575df7
GP
644 err = -EINVAL;
645 break;
646 }
647
648 sec.level = BT_SECURITY_LOW;
649
650 len = min_t(unsigned int, sizeof(sec), optlen);
651 if (copy_from_user((char *) &sec, optval, len)) {
652 err = -EFAULT;
653 break;
654 }
655
656 if (sec.level < BT_SECURITY_LOW ||
2d792818 657 sec.level > BT_SECURITY_HIGH) {
33575df7
GP
658 err = -EINVAL;
659 break;
660 }
661
4343478f 662 chan->sec_level = sec.level;
f1cb9af5 663
0bee1d60
GP
664 if (!chan->conn)
665 break;
666
f1cb9af5 667 conn = chan->conn;
0bee1d60
GP
668
669 /*change security for LE channels */
073d1cf3 670 if (chan->scid == L2CAP_CID_ATT) {
f1cb9af5
VCG
671 if (!conn->hcon->out) {
672 err = -EINVAL;
673 break;
674 }
675
cc110922 676 if (smp_conn_security(conn->hcon, sec.level))
f1cb9af5 677 break;
f1cb9af5 678 sk->sk_state = BT_CONFIG;
3542b854 679 chan->state = BT_CONFIG;
0bee1d60 680
a7d7723a
GP
681 /* or for ACL link */
682 } else if ((sk->sk_state == BT_CONNECT2 &&
2d792818 683 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
a7d7723a
GP
684 sk->sk_state == BT_CONNECTED) {
685 if (!l2cap_chan_check_security(chan))
c5daa683 686 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
a7d7723a
GP
687 else
688 sk->sk_state_change(sk);
0bee1d60
GP
689 } else {
690 err = -EINVAL;
f1cb9af5 691 }
33575df7
GP
692 break;
693
694 case BT_DEFER_SETUP:
695 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
696 err = -EINVAL;
697 break;
698 }
699
700 if (get_user(opt, (u32 __user *) optval)) {
701 err = -EFAULT;
702 break;
703 }
704
bdc25783 705 if (opt) {
c5daa683 706 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
bdc25783
MH
707 set_bit(FLAG_DEFER_SETUP, &chan->flags);
708 } else {
c5daa683 709 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
bdc25783
MH
710 clear_bit(FLAG_DEFER_SETUP, &chan->flags);
711 }
33575df7
GP
712 break;
713
714 case BT_FLUSHABLE:
715 if (get_user(opt, (u32 __user *) optval)) {
716 err = -EFAULT;
717 break;
718 }
719
720 if (opt > BT_FLUSHABLE_ON) {
721 err = -EINVAL;
722 break;
723 }
724
725 if (opt == BT_FLUSHABLE_OFF) {
c1f23a2b 726 conn = chan->conn;
25985edc 727 /* proceed further only when we have l2cap_conn and
33575df7
GP
728 No Flush support in the LM */
729 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
730 err = -EINVAL;
731 break;
732 }
733 }
734
d57b0e8b
AE
735 if (opt)
736 set_bit(FLAG_FLUSHABLE, &chan->flags);
737 else
738 clear_bit(FLAG_FLUSHABLE, &chan->flags);
33575df7
GP
739 break;
740
14b12d0b
JG
741 case BT_POWER:
742 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
2d792818 743 chan->chan_type != L2CAP_CHAN_RAW) {
14b12d0b
JG
744 err = -EINVAL;
745 break;
746 }
747
748 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
749
750 len = min_t(unsigned int, sizeof(pwr), optlen);
751 if (copy_from_user((char *) &pwr, optval, len)) {
752 err = -EFAULT;
753 break;
754 }
15770b1a
AE
755
756 if (pwr.force_active)
757 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
758 else
759 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
760 break;
761
2ea66482 762 case BT_CHANNEL_POLICY:
2ea66482
MM
763 if (get_user(opt, (u32 __user *) optval)) {
764 err = -EFAULT;
765 break;
766 }
767
768 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
769 err = -EINVAL;
770 break;
771 }
772
773 if (chan->mode != L2CAP_MODE_ERTM &&
2d792818 774 chan->mode != L2CAP_MODE_STREAMING) {
2ea66482
MM
775 err = -EOPNOTSUPP;
776 break;
777 }
778
779 chan->chan_policy = (u8) opt;
3f7a56c4
MM
780
781 if (sk->sk_state == BT_CONNECTED &&
782 chan->move_role == L2CAP_MOVE_ROLE_NONE)
783 l2cap_move_start(chan);
784
14b12d0b
JG
785 break;
786
33575df7
GP
787 default:
788 err = -ENOPROTOOPT;
789 break;
790 }
791
792 release_sock(sk);
793 return err;
794}
fd83ccdb 795
2d792818
GP
796static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
797 struct msghdr *msg, size_t len)
fd83ccdb
GP
798{
799 struct sock *sk = sock->sk;
0c1bc5c6 800 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
fd83ccdb
GP
801 int err;
802
803 BT_DBG("sock %p, sk %p", sock, sk);
804
805 err = sock_error(sk);
806 if (err)
807 return err;
808
809 if (msg->msg_flags & MSG_OOB)
810 return -EOPNOTSUPP;
811
a6a5568c 812 if (sk->sk_state != BT_CONNECTED)
9a91a04a 813 return -ENOTCONN;
fd83ccdb 814
e793dcf0
JH
815 lock_sock(sk);
816 err = bt_sock_wait_ready(sk, msg->msg_flags);
817 release_sock(sk);
818 if (err)
819 return err;
820
a6a5568c 821 l2cap_chan_lock(chan);
5e59b791 822 err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
a6a5568c 823 l2cap_chan_unlock(chan);
fd83ccdb 824
fd83ccdb
GP
825 return err;
826}
33575df7 827
2d792818
GP
828static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
829 struct msghdr *msg, size_t len, int flags)
68983259
GP
830{
831 struct sock *sk = sock->sk;
e328140f
MM
832 struct l2cap_pinfo *pi = l2cap_pi(sk);
833 int err;
68983259
GP
834
835 lock_sock(sk);
836
c5daa683
GP
837 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
838 &bt_sk(sk)->flags)) {
8c1d787b 839 sk->sk_state = BT_CONFIG;
3542b854 840 pi->chan->state = BT_CONFIG;
8c1d787b 841
e328140f 842 __l2cap_connect_rsp_defer(pi->chan);
970871bc
JH
843 err = 0;
844 goto done;
68983259
GP
845 }
846
847 release_sock(sk);
848
849 if (sock->type == SOCK_STREAM)
e328140f
MM
850 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
851 else
852 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
853
854 if (pi->chan->mode != L2CAP_MODE_ERTM)
855 return err;
856
857 /* Attempt to put pending rx data in the socket buffer */
858
859 lock_sock(sk);
860
861 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
862 goto done;
863
864 if (pi->rx_busy_skb) {
865 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
866 pi->rx_busy_skb = NULL;
867 else
868 goto done;
869 }
870
871 /* Restore data flow when half of the receive buffer is
872 * available. This avoids resending large numbers of
873 * frames.
874 */
875 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
876 l2cap_chan_busy(pi->chan, 0);
68983259 877
e328140f
MM
878done:
879 release_sock(sk);
880 return err;
68983259
GP
881}
882
05fc1576
GP
883/* Kill socket (only if zapped and orphan)
884 * Must be called on unlocked socket.
885 */
ba3bd0ee 886static void l2cap_sock_kill(struct sock *sk)
05fc1576
GP
887{
888 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
889 return;
890
e05dcc32 891 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
05fc1576
GP
892
893 /* Kill poor orphan */
6ff5abbf 894
4af66c69 895 l2cap_chan_put(l2cap_pi(sk)->chan);
05fc1576
GP
896 sock_set_flag(sk, SOCK_DEAD);
897 sock_put(sk);
898}
899
dc25306b
GP
900static int __l2cap_wait_ack(struct sock *sk)
901{
902 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
903 DECLARE_WAITQUEUE(wait, current);
904 int err = 0;
905 int timeo = HZ/5;
906
907 add_wait_queue(sk_sleep(sk), &wait);
908 set_current_state(TASK_INTERRUPTIBLE);
909 while (chan->unacked_frames > 0 && chan->conn) {
910 if (!timeo)
911 timeo = HZ/5;
912
913 if (signal_pending(current)) {
914 err = sock_intr_errno(timeo);
915 break;
916 }
917
918 release_sock(sk);
919 timeo = schedule_timeout(timeo);
920 lock_sock(sk);
921 set_current_state(TASK_INTERRUPTIBLE);
922
923 err = sock_error(sk);
924 if (err)
925 break;
926 }
927 set_current_state(TASK_RUNNING);
928 remove_wait_queue(sk_sleep(sk), &wait);
929 return err;
930}
931
dcba0dba
GP
932static int l2cap_sock_shutdown(struct socket *sock, int how)
933{
934 struct sock *sk = sock->sk;
7ddb6e0f 935 struct l2cap_chan *chan;
3df91ea2 936 struct l2cap_conn *conn;
dcba0dba
GP
937 int err = 0;
938
939 BT_DBG("sock %p, sk %p", sock, sk);
940
941 if (!sk)
942 return 0;
943
7ddb6e0f 944 chan = l2cap_pi(sk)->chan;
3df91ea2
AE
945 conn = chan->conn;
946
947 if (conn)
948 mutex_lock(&conn->chan_lock);
7ddb6e0f 949
6be36555 950 l2cap_chan_lock(chan);
dcba0dba 951 lock_sock(sk);
6be36555 952
dcba0dba 953 if (!sk->sk_shutdown) {
0c1bc5c6 954 if (chan->mode == L2CAP_MODE_ERTM)
dcba0dba
GP
955 err = __l2cap_wait_ack(sk);
956
957 sk->sk_shutdown = SHUTDOWN_MASK;
3df91ea2 958
6be36555 959 release_sock(sk);
0f852724 960 l2cap_chan_close(chan, 0);
6be36555 961 lock_sock(sk);
dcba0dba
GP
962
963 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
964 err = bt_sock_wait_state(sk, BT_CLOSED,
2d792818 965 sk->sk_lingertime);
dcba0dba
GP
966 }
967
968 if (!err && sk->sk_err)
969 err = -sk->sk_err;
970
971 release_sock(sk);
6be36555 972 l2cap_chan_unlock(chan);
3df91ea2
AE
973
974 if (conn)
975 mutex_unlock(&conn->chan_lock);
976
dcba0dba
GP
977 return err;
978}
979
554f05bb
GP
980static int l2cap_sock_release(struct socket *sock)
981{
982 struct sock *sk = sock->sk;
983 int err;
984
985 BT_DBG("sock %p, sk %p", sock, sk);
986
987 if (!sk)
988 return 0;
989
5b28d95c
MY
990 bt_sock_unlink(&l2cap_sk_list, sk);
991
554f05bb
GP
992 err = l2cap_sock_shutdown(sock, 2);
993
994 sock_orphan(sk);
995 l2cap_sock_kill(sk);
996 return err;
997}
998
c0df7f6e
AE
999static void l2cap_sock_cleanup_listen(struct sock *parent)
1000{
1001 struct sock *sk;
1002
1003 BT_DBG("parent %p", parent);
1004
1005 /* Close not yet accepted channels */
1006 while ((sk = bt_accept_dequeue(parent, NULL))) {
1007 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1008
1009 l2cap_chan_lock(chan);
1010 __clear_chan_timer(chan);
1011 l2cap_chan_close(chan, ECONNRESET);
1012 l2cap_chan_unlock(chan);
1013
1014 l2cap_sock_kill(sk);
1015 }
1016}
1017
80b98027 1018static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
80808e43 1019{
80b98027 1020 struct sock *sk, *parent = chan->data;
80808e43 1021
53826692
GP
1022 /* Check for backlog size */
1023 if (sk_acceptq_is_full(parent)) {
1024 BT_DBG("backlog full %d", parent->sk_ack_backlog);
1025 return NULL;
1026 }
1027
80808e43 1028 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
2d792818 1029 GFP_ATOMIC);
80808e43
GP
1030 if (!sk)
1031 return NULL;
1032
d22015aa
OP
1033 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
1034
80808e43
GP
1035 l2cap_sock_init(sk, parent);
1036
644912e1
GP
1037 bt_accept_enqueue(parent, sk);
1038
80808e43
GP
1039 return l2cap_pi(sk)->chan;
1040}
1041
80b98027 1042static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
23070494 1043{
80b98027 1044 struct sock *sk = chan->data;
84b34d98 1045 int err;
e328140f 1046
6be36555
AE
1047 lock_sock(sk);
1048
84b34d98 1049 if (l2cap_pi(sk)->rx_busy_skb) {
6be36555
AE
1050 err = -ENOMEM;
1051 goto done;
1052 }
e328140f
MM
1053
1054 err = sock_queue_rcv_skb(sk, skb);
1055
1056 /* For ERTM, handle one skb that doesn't fit into the recv
1057 * buffer. This is important to do because the data frames
1058 * have already been acked, so the skb cannot be discarded.
1059 *
1060 * Notify the l2cap core that the buffer is full, so the
1061 * LOCAL_BUSY state is entered and no more frames are
1062 * acked and reassembled until there is buffer space
1063 * available.
1064 */
84b34d98
MH
1065 if (err < 0 && chan->mode == L2CAP_MODE_ERTM) {
1066 l2cap_pi(sk)->rx_busy_skb = skb;
1067 l2cap_chan_busy(chan, 1);
e328140f
MM
1068 err = 0;
1069 }
23070494 1070
6be36555
AE
1071done:
1072 release_sock(sk);
1073
e328140f 1074 return err;
23070494
GP
1075}
1076
80b98027 1077static void l2cap_sock_close_cb(struct l2cap_chan *chan)
ba3bd0ee 1078{
80b98027 1079 struct sock *sk = chan->data;
ba3bd0ee
GP
1080
1081 l2cap_sock_kill(sk);
1082}
1083
c0df7f6e
AE
1084static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
1085{
1086 struct sock *sk = chan->data;
1087 struct sock *parent;
1088
1089 lock_sock(sk);
1090
1091 parent = bt_sk(sk)->parent;
1092
1093 sock_set_flag(sk, SOCK_ZAPPED);
1094
1095 switch (chan->state) {
1096 case BT_OPEN:
1097 case BT_BOUND:
1098 case BT_CLOSED:
1099 break;
1100 case BT_LISTEN:
1101 l2cap_sock_cleanup_listen(sk);
1102 sk->sk_state = BT_CLOSED;
1103 chan->state = BT_CLOSED;
1104
1105 break;
1106 default:
1107 sk->sk_state = BT_CLOSED;
1108 chan->state = BT_CLOSED;
1109
1110 sk->sk_err = err;
1111
1112 if (parent) {
1113 bt_accept_unlink(sk);
1114 parent->sk_data_ready(parent, 0);
1115 } else {
1116 sk->sk_state_change(sk);
1117 }
1118
1119 break;
1120 }
1121
1122 release_sock(sk);
1123}
1124
53f52121
GP
1125static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
1126 int err)
89bc500e 1127{
80b98027 1128 struct sock *sk = chan->data;
89bc500e
GP
1129
1130 sk->sk_state = state;
53f52121
GP
1131
1132 if (err)
1133 sk->sk_err = err;
89bc500e
GP
1134}
1135
2f7719ce 1136static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
90338947 1137 unsigned long len, int nb)
2f7719ce 1138{
90338947
GP
1139 struct sk_buff *skb;
1140 int err;
1141
a6a5568c 1142 l2cap_chan_unlock(chan);
90338947 1143 skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
a6a5568c
MM
1144 l2cap_chan_lock(chan);
1145
90338947
GP
1146 if (!skb)
1147 return ERR_PTR(err);
2f7719ce 1148
90338947 1149 return skb;
2f7719ce
AE
1150}
1151
54a59aa2
AE
1152static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1153{
1154 struct sock *sk = chan->data;
1155 struct sock *parent;
1156
1157 lock_sock(sk);
1158
1159 parent = bt_sk(sk)->parent;
1160
1161 BT_DBG("sk %p, parent %p", sk, parent);
1162
1163 sk->sk_state = BT_CONNECTED;
1164 sk->sk_state_change(sk);
1165
1166 if (parent)
1167 parent->sk_data_ready(parent, 0);
1168
1169 release_sock(sk);
1170}
1171
2dc4e510
GP
1172static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
1173{
1174 struct sock *sk = chan->data;
1175 struct sock *parent = bt_sk(sk)->parent;
1176
1177 if (parent)
1178 parent->sk_data_ready(parent, 0);
1179}
1180
d97c899b
MH
1181static void l2cap_sock_resume_cb(struct l2cap_chan *chan)
1182{
1183 struct sock *sk = chan->data;
1184
1185 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
1186 sk->sk_state_change(sk);
1187}
1188
5ec1bbe5
GP
1189static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan)
1190{
1191 struct sock *sk = chan->data;
1192
1193 lock_sock(sk);
1194 sk->sk_shutdown = SHUTDOWN_MASK;
1195 release_sock(sk);
1196}
1197
8d836d71
GP
1198static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan)
1199{
1200 struct sock *sk = chan->data;
1201
1202 return sk->sk_sndtimeo;
1203}
1204
80808e43
GP
1205static struct l2cap_ops l2cap_chan_ops = {
1206 .name = "L2CAP Socket Interface",
1207 .new_connection = l2cap_sock_new_connection_cb,
23070494 1208 .recv = l2cap_sock_recv_cb,
ba3bd0ee 1209 .close = l2cap_sock_close_cb,
c0df7f6e 1210 .teardown = l2cap_sock_teardown_cb,
89bc500e 1211 .state_change = l2cap_sock_state_change_cb,
54a59aa2 1212 .ready = l2cap_sock_ready_cb,
2dc4e510 1213 .defer = l2cap_sock_defer_cb,
d97c899b 1214 .resume = l2cap_sock_resume_cb,
5ec1bbe5 1215 .set_shutdown = l2cap_sock_set_shutdown_cb,
8d836d71 1216 .get_sndtimeo = l2cap_sock_get_sndtimeo_cb,
2f7719ce 1217 .alloc_skb = l2cap_sock_alloc_skb_cb,
80808e43
GP
1218};
1219
bb58f747
GP
1220static void l2cap_sock_destruct(struct sock *sk)
1221{
1222 BT_DBG("sk %p", sk);
1223
23d3a869
SL
1224 if (l2cap_pi(sk)->chan)
1225 l2cap_chan_put(l2cap_pi(sk)->chan);
84b34d98 1226
e328140f
MM
1227 if (l2cap_pi(sk)->rx_busy_skb) {
1228 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1229 l2cap_pi(sk)->rx_busy_skb = NULL;
1230 }
1231
bb58f747
GP
1232 skb_queue_purge(&sk->sk_receive_queue);
1233 skb_queue_purge(&sk->sk_write_queue);
1234}
1235
2edf870d
MH
1236static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name,
1237 int *msg_namelen)
1238{
1239 struct sockaddr_l2 *la = (struct sockaddr_l2 *) msg_name;
1240
1241 memset(la, 0, sizeof(struct sockaddr_l2));
1242 la->l2_family = AF_BLUETOOTH;
1243 la->l2_psm = bt_cb(skb)->psm;
1244 bacpy(&la->l2_bdaddr, &bt_cb(skb)->bdaddr);
1245
1246 *msg_namelen = sizeof(struct sockaddr_l2);
1247}
1248
80808e43 1249static void l2cap_sock_init(struct sock *sk, struct sock *parent)
bb58f747 1250{
84b34d98 1251 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
bb58f747
GP
1252
1253 BT_DBG("sk %p", sk);
1254
1255 if (parent) {
b4450035
GP
1256 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1257
bb58f747 1258 sk->sk_type = parent->sk_type;
c5daa683 1259 bt_sk(sk)->flags = bt_sk(parent)->flags;
bb58f747 1260
715ec005 1261 chan->chan_type = pchan->chan_type;
0c1bc5c6
GP
1262 chan->imtu = pchan->imtu;
1263 chan->omtu = pchan->omtu;
b4450035 1264 chan->conf_state = pchan->conf_state;
0c1bc5c6 1265 chan->mode = pchan->mode;
47d1ec61
GP
1266 chan->fcs = pchan->fcs;
1267 chan->max_tx = pchan->max_tx;
1268 chan->tx_win = pchan->tx_win;
6b3c7104 1269 chan->tx_win_max = pchan->tx_win_max;
4343478f 1270 chan->sec_level = pchan->sec_level;
d57b0e8b 1271 chan->flags = pchan->flags;
6230c9b4
PM
1272
1273 security_sk_clone(parent, sk);
bb58f747 1274 } else {
715ec005
GP
1275 switch (sk->sk_type) {
1276 case SOCK_RAW:
1277 chan->chan_type = L2CAP_CHAN_RAW;
1278 break;
1279 case SOCK_DGRAM:
1280 chan->chan_type = L2CAP_CHAN_CONN_LESS;
2edf870d 1281 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name;
715ec005
GP
1282 break;
1283 case SOCK_SEQPACKET:
1284 case SOCK_STREAM:
1285 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1286 break;
1287 }
1288
0c1bc5c6
GP
1289 chan->imtu = L2CAP_DEFAULT_MTU;
1290 chan->omtu = 0;
bb58f747 1291 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
0c1bc5c6 1292 chan->mode = L2CAP_MODE_ERTM;
c1360a1c 1293 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
bb58f747 1294 } else {
0c1bc5c6 1295 chan->mode = L2CAP_MODE_BASIC;
bb58f747 1296 }
bd4b1653
AE
1297
1298 l2cap_chan_set_defaults(chan);
bb58f747
GP
1299 }
1300
1301 /* Default config options */
0c1bc5c6 1302 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
80808e43
GP
1303
1304 chan->data = sk;
1305 chan->ops = &l2cap_chan_ops;
bb58f747
GP
1306}
1307
1308static struct proto l2cap_proto = {
1309 .name = "L2CAP",
1310 .owner = THIS_MODULE,
1311 .obj_size = sizeof(struct l2cap_pinfo)
1312};
1313
2d792818
GP
1314static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
1315 int proto, gfp_t prio)
bb58f747
GP
1316{
1317 struct sock *sk;
dc50a06d 1318 struct l2cap_chan *chan;
bb58f747
GP
1319
1320 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1321 if (!sk)
1322 return NULL;
1323
1324 sock_init_data(sock, sk);
1325 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1326
1327 sk->sk_destruct = l2cap_sock_destruct;
ba13ccd9 1328 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
bb58f747
GP
1329
1330 sock_reset_flag(sk, SOCK_ZAPPED);
1331
1332 sk->sk_protocol = proto;
1333 sk->sk_state = BT_OPEN;
1334
eef1d9b6 1335 chan = l2cap_chan_create();
dc50a06d 1336 if (!chan) {
49dfbb91 1337 sk_free(sk);
dc50a06d
GP
1338 return NULL;
1339 }
1340
61d6ef3e
MM
1341 l2cap_chan_hold(chan);
1342
eef1d9b6
GP
1343 chan->sk = sk;
1344
dc50a06d
GP
1345 l2cap_pi(sk)->chan = chan;
1346
bb58f747
GP
1347 return sk;
1348}
1349
1350static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1351 int kern)
1352{
1353 struct sock *sk;
1354
1355 BT_DBG("sock %p", sock);
1356
1357 sock->state = SS_UNCONNECTED;
1358
1359 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
2d792818 1360 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
bb58f747
GP
1361 return -ESOCKTNOSUPPORT;
1362
1363 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1364 return -EPERM;
1365
1366 sock->ops = &l2cap_sock_ops;
1367
1368 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1369 if (!sk)
1370 return -ENOMEM;
1371
1372 l2cap_sock_init(sk, NULL);
5b28d95c 1373 bt_sock_link(&l2cap_sk_list, sk);
bb58f747
GP
1374 return 0;
1375}
1376
cf2f90f5 1377static const struct proto_ops l2cap_sock_ops = {
65390587
GP
1378 .family = PF_BLUETOOTH,
1379 .owner = THIS_MODULE,
1380 .release = l2cap_sock_release,
1381 .bind = l2cap_sock_bind,
1382 .connect = l2cap_sock_connect,
1383 .listen = l2cap_sock_listen,
1384 .accept = l2cap_sock_accept,
1385 .getname = l2cap_sock_getname,
1386 .sendmsg = l2cap_sock_sendmsg,
1387 .recvmsg = l2cap_sock_recvmsg,
1388 .poll = bt_sock_poll,
1389 .ioctl = bt_sock_ioctl,
1390 .mmap = sock_no_mmap,
1391 .socketpair = sock_no_socketpair,
1392 .shutdown = l2cap_sock_shutdown,
1393 .setsockopt = l2cap_sock_setsockopt,
1394 .getsockopt = l2cap_sock_getsockopt
1395};
1396
bb58f747
GP
1397static const struct net_proto_family l2cap_sock_family_ops = {
1398 .family = PF_BLUETOOTH,
1399 .owner = THIS_MODULE,
1400 .create = l2cap_sock_create,
1401};
1402
1403int __init l2cap_init_sockets(void)
1404{
e2174ca4 1405 int err;
bb58f747 1406
e2174ca4
GP
1407 err = proto_register(&l2cap_proto, 0);
1408 if (err < 0)
1409 return err;
bb58f747 1410
e2174ca4 1411 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
5b28d95c
MY
1412 if (err < 0) {
1413 BT_ERR("L2CAP socket registration failed");
e2174ca4 1414 goto error;
5b28d95c
MY
1415 }
1416
b0316615 1417 err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
2d792818 1418 NULL);
5b28d95c
MY
1419 if (err < 0) {
1420 BT_ERR("Failed to create L2CAP proc file");
1421 bt_sock_unregister(BTPROTO_L2CAP);
1422 goto error;
1423 }
bb58f747 1424
e2174ca4 1425 BT_INFO("L2CAP socket layer initialized");
bb58f747 1426
e2174ca4 1427 return 0;
bb58f747
GP
1428
1429error:
e2174ca4
GP
1430 proto_unregister(&l2cap_proto);
1431 return err;
bb58f747
GP
1432}
1433
1434void l2cap_cleanup_sockets(void)
1435{
5b28d95c 1436 bt_procfs_cleanup(&init_net, "l2cap");
5e9d7f86 1437 bt_sock_unregister(BTPROTO_L2CAP);
e2174ca4 1438 proto_unregister(&l2cap_proto);
bb58f747 1439}
This page took 0.246815 seconds and 5 git commands to generate.