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