Bluetooth: Remove unused function
[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
6230c9b4 30#include <linux/security.h>
bc3b2d7f 31#include <linux/export.h>
6230c9b4 32
bb58f747 33#include <net/bluetooth/bluetooth.h>
33575df7 34#include <net/bluetooth/hci_core.h>
bb58f747 35#include <net/bluetooth/l2cap.h>
f1cb9af5 36#include <net/bluetooth/smp.h>
bb58f747 37
cf2f90f5 38static const struct proto_ops l2cap_sock_ops;
80808e43
GP
39static void l2cap_sock_init(struct sock *sk, struct sock *parent);
40static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
cf2f90f5 41
af6bcd82
GP
42static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
43{
44 struct sock *sk = sock->sk;
4343478f 45 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
46 struct sockaddr_l2 la;
47 int len, err = 0;
48
49 BT_DBG("sk %p", sk);
50
51 if (!addr || addr->sa_family != AF_BLUETOOTH)
52 return -EINVAL;
53
54 memset(&la, 0, sizeof(la));
55 len = min_t(unsigned int, sizeof(la), alen);
56 memcpy(&la, addr, len);
57
b62f328b 58 if (la.l2_cid && la.l2_psm)
af6bcd82
GP
59 return -EINVAL;
60
61 lock_sock(sk);
62
63 if (sk->sk_state != BT_OPEN) {
64 err = -EBADFD;
65 goto done;
66 }
67
68 if (la.l2_psm) {
69 __u16 psm = __le16_to_cpu(la.l2_psm);
70
71 /* PSM must be odd and lsb of upper byte must be 0 */
72 if ((psm & 0x0101) != 0x0001) {
73 err = -EINVAL;
74 goto done;
75 }
76
77 /* Restrict usage of well-known PSMs */
78 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
79 err = -EACCES;
80 goto done;
81 }
82 }
83
9e4425ff 84 if (la.l2_cid)
6e4aff10 85 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
9e4425ff
GP
86 else
87 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
af6bcd82 88
9e4425ff
GP
89 if (err < 0)
90 goto done;
af6bcd82 91
9e4425ff
GP
92 if (__le16_to_cpu(la.l2_psm) == 0x0001 ||
93 __le16_to_cpu(la.l2_psm) == 0x0003)
94 chan->sec_level = BT_SECURITY_SDP;
b62f328b 95
9e4425ff 96 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
89bc500e
GP
97
98 chan->state = BT_BOUND;
9e4425ff 99 sk->sk_state = BT_BOUND;
af6bcd82
GP
100
101done:
102 release_sock(sk);
103 return err;
104}
105
4e34c50b
GP
106static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
107{
108 struct sock *sk = sock->sk;
0c1bc5c6 109 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
4e34c50b
GP
110 struct sockaddr_l2 la;
111 int len, err = 0;
112
113 BT_DBG("sk %p", sk);
114
115 if (!addr || alen < sizeof(addr->sa_family) ||
116 addr->sa_family != AF_BLUETOOTH)
117 return -EINVAL;
118
119 memset(&la, 0, sizeof(la));
120 len = min_t(unsigned int, sizeof(la), alen);
121 memcpy(&la, addr, len);
122
acd7d370 123 if (la.l2_cid && la.l2_psm)
4e34c50b
GP
124 return -EINVAL;
125
6e4aff10 126 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
8e9f9892 127 &la.l2_bdaddr, la.l2_bdaddr_type);
4e34c50b 128 if (err)
b3fb611e 129 return err;
4e34c50b 130
6be36555
AE
131 lock_sock(sk);
132
4e34c50b
GP
133 err = bt_sock_wait_state(sk, BT_CONNECTED,
134 sock_sndtimeo(sk, flags & O_NONBLOCK));
b3fb611e
AE
135
136 release_sock(sk);
137
4e34c50b
GP
138 return err;
139}
140
af6bcd82
GP
141static int l2cap_sock_listen(struct socket *sock, int backlog)
142{
143 struct sock *sk = sock->sk;
0c1bc5c6 144 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
af6bcd82
GP
145 int err = 0;
146
147 BT_DBG("sk %p backlog %d", sk, backlog);
148
149 lock_sock(sk);
150
6b3af733 151 if (sk->sk_state != BT_BOUND) {
af6bcd82
GP
152 err = -EBADFD;
153 goto done;
154 }
155
6b3af733
MH
156 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
157 err = -EINVAL;
158 goto done;
159 }
160
0c1bc5c6 161 switch (chan->mode) {
af6bcd82
GP
162 case L2CAP_MODE_BASIC:
163 break;
164 case L2CAP_MODE_ERTM:
165 case L2CAP_MODE_STREAMING:
166 if (!disable_ertm)
167 break;
168 /* fall through */
169 default:
170 err = -ENOTSUPP;
171 goto done;
172 }
173
af6bcd82
GP
174 sk->sk_max_ack_backlog = backlog;
175 sk->sk_ack_backlog = 0;
89bc500e
GP
176
177 chan->state = BT_LISTEN;
af6bcd82
GP
178 sk->sk_state = BT_LISTEN;
179
180done:
181 release_sock(sk);
182 return err;
183}
184
c47b7c72
GP
185static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
186{
187 DECLARE_WAITQUEUE(wait, current);
188 struct sock *sk = sock->sk, *nsk;
189 long timeo;
190 int err = 0;
191
192 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
193
c47b7c72
GP
194 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
195
196 BT_DBG("sk %p timeo %ld", sk, timeo);
197
198 /* Wait for an incoming connection. (wake-one). */
199 add_wait_queue_exclusive(sk_sleep(sk), &wait);
f9a3c20a 200 while (1) {
c47b7c72 201 set_current_state(TASK_INTERRUPTIBLE);
f9a3c20a
PH
202
203 if (sk->sk_state != BT_LISTEN) {
204 err = -EBADFD;
c47b7c72
GP
205 break;
206 }
207
f9a3c20a
PH
208 nsk = bt_accept_dequeue(sk, newsock);
209 if (nsk)
210 break;
c47b7c72 211
f9a3c20a
PH
212 if (!timeo) {
213 err = -EAGAIN;
c47b7c72
GP
214 break;
215 }
216
217 if (signal_pending(current)) {
218 err = sock_intr_errno(timeo);
219 break;
220 }
f9a3c20a
PH
221
222 release_sock(sk);
223 timeo = schedule_timeout(timeo);
224 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
c47b7c72 225 }
f9a3c20a 226 __set_current_state(TASK_RUNNING);
c47b7c72
GP
227 remove_wait_queue(sk_sleep(sk), &wait);
228
229 if (err)
230 goto done;
231
232 newsock->state = SS_CONNECTED;
233
234 BT_DBG("new socket %p", nsk);
235
236done:
237 release_sock(sk);
238 return err;
239}
240
d7175d55
GP
241static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
242{
243 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
244 struct sock *sk = sock->sk;
0c1bc5c6 245 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
d7175d55
GP
246
247 BT_DBG("sock %p, sk %p", sock, sk);
248
249 addr->sa_family = AF_BLUETOOTH;
250 *len = sizeof(struct sockaddr_l2);
251
252 if (peer) {
fe4128e0 253 la->l2_psm = chan->psm;
d7175d55 254 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
fe4128e0 255 la->l2_cid = cpu_to_le16(chan->dcid);
d7175d55 256 } else {
0c1bc5c6 257 la->l2_psm = chan->sport;
d7175d55 258 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
fe4128e0 259 la->l2_cid = cpu_to_le16(chan->scid);
d7175d55
GP
260 }
261
262 return 0;
263}
264
99f4808d
GP
265static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
266{
267 struct sock *sk = sock->sk;
4343478f 268 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d
GP
269 struct l2cap_options opts;
270 struct l2cap_conninfo cinfo;
271 int len, err = 0;
272 u32 opt;
273
274 BT_DBG("sk %p", sk);
275
276 if (get_user(len, optlen))
277 return -EFAULT;
278
279 lock_sock(sk);
280
281 switch (optname) {
282 case L2CAP_OPTIONS:
e3fb592b 283 memset(&opts, 0, sizeof(opts));
0c1bc5c6
GP
284 opts.imtu = chan->imtu;
285 opts.omtu = chan->omtu;
286 opts.flush_to = chan->flush_to;
287 opts.mode = chan->mode;
47d1ec61
GP
288 opts.fcs = chan->fcs;
289 opts.max_tx = chan->max_tx;
6327eb98 290 opts.txwin_size = chan->tx_win;
99f4808d
GP
291
292 len = min_t(unsigned int, len, sizeof(opts));
293 if (copy_to_user(optval, (char *) &opts, len))
294 err = -EFAULT;
295
296 break;
297
298 case L2CAP_LM:
4343478f 299 switch (chan->sec_level) {
99f4808d
GP
300 case BT_SECURITY_LOW:
301 opt = L2CAP_LM_AUTH;
302 break;
303 case BT_SECURITY_MEDIUM:
304 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
305 break;
306 case BT_SECURITY_HIGH:
307 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
308 L2CAP_LM_SECURE;
309 break;
310 default:
311 opt = 0;
312 break;
313 }
314
43bd0f32 315 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
99f4808d
GP
316 opt |= L2CAP_LM_MASTER;
317
ecf61bdb 318 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
99f4808d
GP
319 opt |= L2CAP_LM_RELIABLE;
320
321 if (put_user(opt, (u32 __user *) optval))
322 err = -EFAULT;
323 break;
324
325 case L2CAP_CONNINFO:
326 if (sk->sk_state != BT_CONNECTED &&
327 !(sk->sk_state == BT_CONNECT2 &&
328 bt_sk(sk)->defer_setup)) {
329 err = -ENOTCONN;
330 break;
331 }
332
8d03e971 333 memset(&cinfo, 0, sizeof(cinfo));
8c1d787b
GP
334 cinfo.hci_handle = chan->conn->hcon->handle;
335 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
99f4808d
GP
336
337 len = min_t(unsigned int, len, sizeof(cinfo));
338 if (copy_to_user(optval, (char *) &cinfo, len))
339 err = -EFAULT;
340
341 break;
342
343 default:
344 err = -ENOPROTOOPT;
345 break;
346 }
347
348 release_sock(sk);
349 return err;
350}
351
352static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
353{
354 struct sock *sk = sock->sk;
4343478f 355 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
99f4808d 356 struct bt_security sec;
14b12d0b 357 struct bt_power pwr;
99f4808d
GP
358 int len, err = 0;
359
360 BT_DBG("sk %p", sk);
361
362 if (level == SOL_L2CAP)
363 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
364
365 if (level != SOL_BLUETOOTH)
366 return -ENOPROTOOPT;
367
368 if (get_user(len, optlen))
369 return -EFAULT;
370
371 lock_sock(sk);
372
373 switch (optname) {
374 case BT_SECURITY:
715ec005
GP
375 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
376 chan->chan_type != L2CAP_CHAN_RAW) {
99f4808d
GP
377 err = -EINVAL;
378 break;
379 }
380
8f360119 381 memset(&sec, 0, sizeof(sec));
4343478f 382 sec.level = chan->sec_level;
99f4808d 383
8f360119
VCG
384 if (sk->sk_state == BT_CONNECTED)
385 sec.key_size = chan->conn->hcon->enc_key_size;
386
99f4808d
GP
387 len = min_t(unsigned int, len, sizeof(sec));
388 if (copy_to_user(optval, (char *) &sec, len))
389 err = -EFAULT;
390
391 break;
392
393 case BT_DEFER_SETUP:
394 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
395 err = -EINVAL;
396 break;
397 }
398
399 if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval))
400 err = -EFAULT;
401
402 break;
403
404 case BT_FLUSHABLE:
d57b0e8b
AE
405 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
406 (u32 __user *) optval))
99f4808d
GP
407 err = -EFAULT;
408
409 break;
410
14b12d0b
JG
411 case BT_POWER:
412 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
413 && sk->sk_type != SOCK_RAW) {
414 err = -EINVAL;
415 break;
416 }
417
15770b1a 418 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
419
420 len = min_t(unsigned int, len, sizeof(pwr));
421 if (copy_to_user(optval, (char *) &pwr, len))
422 err = -EFAULT;
423
424 break;
425
2ea66482
MM
426 case BT_CHANNEL_POLICY:
427 if (!enable_hs) {
428 err = -ENOPROTOOPT;
429 break;
430 }
431
432 if (put_user(chan->chan_policy, (u32 __user *) optval))
433 err = -EFAULT;
434 break;
435
99f4808d
GP
436 default:
437 err = -ENOPROTOOPT;
438 break;
439 }
440
441 release_sock(sk);
442 return err;
443}
444
33575df7
GP
445static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
446{
447 struct sock *sk = sock->sk;
b4450035 448 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7
GP
449 struct l2cap_options opts;
450 int len, err = 0;
451 u32 opt;
452
453 BT_DBG("sk %p", sk);
454
455 lock_sock(sk);
456
457 switch (optname) {
458 case L2CAP_OPTIONS:
459 if (sk->sk_state == BT_CONNECTED) {
460 err = -EINVAL;
461 break;
462 }
463
0c1bc5c6
GP
464 opts.imtu = chan->imtu;
465 opts.omtu = chan->omtu;
466 opts.flush_to = chan->flush_to;
467 opts.mode = chan->mode;
47d1ec61
GP
468 opts.fcs = chan->fcs;
469 opts.max_tx = chan->max_tx;
6327eb98 470 opts.txwin_size = chan->tx_win;
33575df7
GP
471
472 len = min_t(unsigned int, sizeof(opts), optlen);
473 if (copy_from_user((char *) &opts, optval, len)) {
474 err = -EFAULT;
475 break;
476 }
477
6327eb98 478 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
33575df7
GP
479 err = -EINVAL;
480 break;
481 }
482
0c1bc5c6
GP
483 chan->mode = opts.mode;
484 switch (chan->mode) {
33575df7 485 case L2CAP_MODE_BASIC:
c1360a1c 486 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
33575df7
GP
487 break;
488 case L2CAP_MODE_ERTM:
489 case L2CAP_MODE_STREAMING:
490 if (!disable_ertm)
491 break;
492 /* fall through */
493 default:
494 err = -EINVAL;
495 break;
496 }
497
0c1bc5c6
GP
498 chan->imtu = opts.imtu;
499 chan->omtu = opts.omtu;
47d1ec61
GP
500 chan->fcs = opts.fcs;
501 chan->max_tx = opts.max_tx;
6327eb98 502 chan->tx_win = opts.txwin_size;
33575df7
GP
503 break;
504
505 case L2CAP_LM:
506 if (get_user(opt, (u32 __user *) optval)) {
507 err = -EFAULT;
508 break;
509 }
510
511 if (opt & L2CAP_LM_AUTH)
4343478f 512 chan->sec_level = BT_SECURITY_LOW;
33575df7 513 if (opt & L2CAP_LM_ENCRYPT)
4343478f 514 chan->sec_level = BT_SECURITY_MEDIUM;
33575df7 515 if (opt & L2CAP_LM_SECURE)
4343478f 516 chan->sec_level = BT_SECURITY_HIGH;
33575df7 517
43bd0f32
AE
518 if (opt & L2CAP_LM_MASTER)
519 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
520 else
521 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
ecf61bdb
AE
522
523 if (opt & L2CAP_LM_RELIABLE)
524 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
525 else
526 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
33575df7
GP
527 break;
528
529 default:
530 err = -ENOPROTOOPT;
531 break;
532 }
533
534 release_sock(sk);
535 return err;
536}
537
538static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
539{
540 struct sock *sk = sock->sk;
4343478f 541 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
33575df7 542 struct bt_security sec;
14b12d0b 543 struct bt_power pwr;
f1cb9af5 544 struct l2cap_conn *conn;
33575df7
GP
545 int len, err = 0;
546 u32 opt;
547
548 BT_DBG("sk %p", sk);
549
550 if (level == SOL_L2CAP)
551 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
552
553 if (level != SOL_BLUETOOTH)
554 return -ENOPROTOOPT;
555
556 lock_sock(sk);
557
558 switch (optname) {
559 case BT_SECURITY:
715ec005
GP
560 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
561 chan->chan_type != L2CAP_CHAN_RAW) {
33575df7
GP
562 err = -EINVAL;
563 break;
564 }
565
566 sec.level = BT_SECURITY_LOW;
567
568 len = min_t(unsigned int, sizeof(sec), optlen);
569 if (copy_from_user((char *) &sec, optval, len)) {
570 err = -EFAULT;
571 break;
572 }
573
574 if (sec.level < BT_SECURITY_LOW ||
575 sec.level > BT_SECURITY_HIGH) {
576 err = -EINVAL;
577 break;
578 }
579
4343478f 580 chan->sec_level = sec.level;
f1cb9af5 581
0bee1d60
GP
582 if (!chan->conn)
583 break;
584
f1cb9af5 585 conn = chan->conn;
0bee1d60
GP
586
587 /*change security for LE channels */
588 if (chan->scid == L2CAP_CID_LE_DATA) {
f1cb9af5
VCG
589 if (!conn->hcon->out) {
590 err = -EINVAL;
591 break;
592 }
593
594 if (smp_conn_security(conn, sec.level))
595 break;
f1cb9af5 596 sk->sk_state = BT_CONFIG;
3542b854 597 chan->state = BT_CONFIG;
0bee1d60
GP
598
599 /* or for ACL link, under defer_setup time */
600 } else if (sk->sk_state == BT_CONNECT2 &&
601 bt_sk(sk)->defer_setup) {
602 err = l2cap_chan_check_security(chan);
603 } else {
604 err = -EINVAL;
f1cb9af5 605 }
33575df7
GP
606 break;
607
608 case BT_DEFER_SETUP:
609 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
610 err = -EINVAL;
611 break;
612 }
613
614 if (get_user(opt, (u32 __user *) optval)) {
615 err = -EFAULT;
616 break;
617 }
618
619 bt_sk(sk)->defer_setup = opt;
620 break;
621
622 case BT_FLUSHABLE:
623 if (get_user(opt, (u32 __user *) optval)) {
624 err = -EFAULT;
625 break;
626 }
627
628 if (opt > BT_FLUSHABLE_ON) {
629 err = -EINVAL;
630 break;
631 }
632
633 if (opt == BT_FLUSHABLE_OFF) {
8c1d787b 634 struct l2cap_conn *conn = chan->conn;
25985edc 635 /* proceed further only when we have l2cap_conn and
33575df7
GP
636 No Flush support in the LM */
637 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
638 err = -EINVAL;
639 break;
640 }
641 }
642
d57b0e8b
AE
643 if (opt)
644 set_bit(FLAG_FLUSHABLE, &chan->flags);
645 else
646 clear_bit(FLAG_FLUSHABLE, &chan->flags);
33575df7
GP
647 break;
648
14b12d0b
JG
649 case BT_POWER:
650 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
651 chan->chan_type != L2CAP_CHAN_RAW) {
652 err = -EINVAL;
653 break;
654 }
655
656 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
657
658 len = min_t(unsigned int, sizeof(pwr), optlen);
659 if (copy_from_user((char *) &pwr, optval, len)) {
660 err = -EFAULT;
661 break;
662 }
15770b1a
AE
663
664 if (pwr.force_active)
665 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
666 else
667 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
14b12d0b
JG
668 break;
669
2ea66482
MM
670 case BT_CHANNEL_POLICY:
671 if (!enable_hs) {
672 err = -ENOPROTOOPT;
673 break;
674 }
675
676 if (get_user(opt, (u32 __user *) optval)) {
677 err = -EFAULT;
678 break;
679 }
680
681 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
682 err = -EINVAL;
683 break;
684 }
685
686 if (chan->mode != L2CAP_MODE_ERTM &&
687 chan->mode != L2CAP_MODE_STREAMING) {
688 err = -EOPNOTSUPP;
689 break;
690 }
691
692 chan->chan_policy = (u8) opt;
14b12d0b
JG
693 break;
694
33575df7
GP
695 default:
696 err = -ENOPROTOOPT;
697 break;
698 }
699
700 release_sock(sk);
701 return err;
702}
fd83ccdb
GP
703
704static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
705{
706 struct sock *sk = sock->sk;
0c1bc5c6 707 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
fd83ccdb
GP
708 int err;
709
710 BT_DBG("sock %p, sk %p", sock, sk);
711
712 err = sock_error(sk);
713 if (err)
714 return err;
715
716 if (msg->msg_flags & MSG_OOB)
717 return -EOPNOTSUPP;
718
719 lock_sock(sk);
720
721 if (sk->sk_state != BT_CONNECTED) {
9a91a04a
GP
722 release_sock(sk);
723 return -ENOTCONN;
fd83ccdb
GP
724 }
725
5e59b791 726 err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
fd83ccdb 727
fd83ccdb
GP
728 release_sock(sk);
729 return err;
730}
33575df7 731
68983259
GP
732static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
733{
734 struct sock *sk = sock->sk;
e328140f
MM
735 struct l2cap_pinfo *pi = l2cap_pi(sk);
736 int err;
68983259
GP
737
738 lock_sock(sk);
739
740 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
8c1d787b 741 sk->sk_state = BT_CONFIG;
3542b854 742 pi->chan->state = BT_CONFIG;
8c1d787b 743
e328140f 744 __l2cap_connect_rsp_defer(pi->chan);
68983259
GP
745 release_sock(sk);
746 return 0;
747 }
748
749 release_sock(sk);
750
751 if (sock->type == SOCK_STREAM)
e328140f
MM
752 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
753 else
754 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
755
756 if (pi->chan->mode != L2CAP_MODE_ERTM)
757 return err;
758
759 /* Attempt to put pending rx data in the socket buffer */
760
761 lock_sock(sk);
762
763 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
764 goto done;
765
766 if (pi->rx_busy_skb) {
767 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
768 pi->rx_busy_skb = NULL;
769 else
770 goto done;
771 }
772
773 /* Restore data flow when half of the receive buffer is
774 * available. This avoids resending large numbers of
775 * frames.
776 */
777 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
778 l2cap_chan_busy(pi->chan, 0);
68983259 779
e328140f
MM
780done:
781 release_sock(sk);
782 return err;
68983259
GP
783}
784
05fc1576
GP
785/* Kill socket (only if zapped and orphan)
786 * Must be called on unlocked socket.
787 */
ba3bd0ee 788static void l2cap_sock_kill(struct sock *sk)
05fc1576
GP
789{
790 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
791 return;
792
e05dcc32 793 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
05fc1576
GP
794
795 /* Kill poor orphan */
6ff5abbf 796
23691d75 797 l2cap_chan_destroy(l2cap_pi(sk)->chan);
05fc1576
GP
798 sock_set_flag(sk, SOCK_DEAD);
799 sock_put(sk);
800}
801
dcba0dba
GP
802static int l2cap_sock_shutdown(struct socket *sock, int how)
803{
804 struct sock *sk = sock->sk;
7ddb6e0f 805 struct l2cap_chan *chan;
3df91ea2 806 struct l2cap_conn *conn;
dcba0dba
GP
807 int err = 0;
808
809 BT_DBG("sock %p, sk %p", sock, sk);
810
811 if (!sk)
812 return 0;
813
7ddb6e0f 814 chan = l2cap_pi(sk)->chan;
3df91ea2
AE
815 conn = chan->conn;
816
817 if (conn)
818 mutex_lock(&conn->chan_lock);
7ddb6e0f 819
6be36555 820 l2cap_chan_lock(chan);
dcba0dba 821 lock_sock(sk);
6be36555 822
dcba0dba 823 if (!sk->sk_shutdown) {
0c1bc5c6 824 if (chan->mode == L2CAP_MODE_ERTM)
dcba0dba
GP
825 err = __l2cap_wait_ack(sk);
826
827 sk->sk_shutdown = SHUTDOWN_MASK;
3df91ea2 828
6be36555 829 release_sock(sk);
0f852724 830 l2cap_chan_close(chan, 0);
6be36555 831 lock_sock(sk);
dcba0dba
GP
832
833 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
834 err = bt_sock_wait_state(sk, BT_CLOSED,
835 sk->sk_lingertime);
836 }
837
838 if (!err && sk->sk_err)
839 err = -sk->sk_err;
840
841 release_sock(sk);
6be36555 842 l2cap_chan_unlock(chan);
3df91ea2
AE
843
844 if (conn)
845 mutex_unlock(&conn->chan_lock);
846
dcba0dba
GP
847 return err;
848}
849
554f05bb
GP
850static int l2cap_sock_release(struct socket *sock)
851{
852 struct sock *sk = sock->sk;
853 int err;
854
855 BT_DBG("sock %p, sk %p", sock, sk);
856
857 if (!sk)
858 return 0;
859
860 err = l2cap_sock_shutdown(sock, 2);
861
862 sock_orphan(sk);
863 l2cap_sock_kill(sk);
864 return err;
865}
866
80808e43
GP
867static struct l2cap_chan *l2cap_sock_new_connection_cb(void *data)
868{
869 struct sock *sk, *parent = data;
870
871 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
872 GFP_ATOMIC);
873 if (!sk)
874 return NULL;
875
d22015aa
OP
876 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
877
80808e43
GP
878 l2cap_sock_init(sk, parent);
879
880 return l2cap_pi(sk)->chan;
881}
882
23070494
GP
883static int l2cap_sock_recv_cb(void *data, struct sk_buff *skb)
884{
e328140f 885 int err;
23070494 886 struct sock *sk = data;
e328140f
MM
887 struct l2cap_pinfo *pi = l2cap_pi(sk);
888
6be36555
AE
889 lock_sock(sk);
890
891 if (pi->rx_busy_skb) {
892 err = -ENOMEM;
893 goto done;
894 }
e328140f
MM
895
896 err = sock_queue_rcv_skb(sk, skb);
897
898 /* For ERTM, handle one skb that doesn't fit into the recv
899 * buffer. This is important to do because the data frames
900 * have already been acked, so the skb cannot be discarded.
901 *
902 * Notify the l2cap core that the buffer is full, so the
903 * LOCAL_BUSY state is entered and no more frames are
904 * acked and reassembled until there is buffer space
905 * available.
906 */
907 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
908 pi->rx_busy_skb = skb;
909 l2cap_chan_busy(pi->chan, 1);
910 err = 0;
911 }
23070494 912
6be36555
AE
913done:
914 release_sock(sk);
915
e328140f 916 return err;
23070494
GP
917}
918
ba3bd0ee
GP
919static void l2cap_sock_close_cb(void *data)
920{
921 struct sock *sk = data;
922
923 l2cap_sock_kill(sk);
924}
925
89bc500e
GP
926static void l2cap_sock_state_change_cb(void *data, int state)
927{
928 struct sock *sk = data;
929
930 sk->sk_state = state;
931}
932
2f7719ce 933static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
90338947 934 unsigned long len, int nb)
2f7719ce 935{
90338947
GP
936 struct sk_buff *skb;
937 int err;
938
939 skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
940 if (!skb)
941 return ERR_PTR(err);
2f7719ce 942
90338947 943 return skb;
2f7719ce
AE
944}
945
80808e43
GP
946static struct l2cap_ops l2cap_chan_ops = {
947 .name = "L2CAP Socket Interface",
948 .new_connection = l2cap_sock_new_connection_cb,
23070494 949 .recv = l2cap_sock_recv_cb,
ba3bd0ee 950 .close = l2cap_sock_close_cb,
89bc500e 951 .state_change = l2cap_sock_state_change_cb,
2f7719ce 952 .alloc_skb = l2cap_sock_alloc_skb_cb,
80808e43
GP
953};
954
bb58f747
GP
955static void l2cap_sock_destruct(struct sock *sk)
956{
957 BT_DBG("sk %p", sk);
958
e328140f
MM
959 if (l2cap_pi(sk)->rx_busy_skb) {
960 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
961 l2cap_pi(sk)->rx_busy_skb = NULL;
962 }
963
bb58f747
GP
964 skb_queue_purge(&sk->sk_receive_queue);
965 skb_queue_purge(&sk->sk_write_queue);
966}
967
80808e43 968static void l2cap_sock_init(struct sock *sk, struct sock *parent)
bb58f747
GP
969{
970 struct l2cap_pinfo *pi = l2cap_pi(sk);
b4450035 971 struct l2cap_chan *chan = pi->chan;
bb58f747
GP
972
973 BT_DBG("sk %p", sk);
974
975 if (parent) {
b4450035
GP
976 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
977
bb58f747
GP
978 sk->sk_type = parent->sk_type;
979 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
980
715ec005 981 chan->chan_type = pchan->chan_type;
0c1bc5c6
GP
982 chan->imtu = pchan->imtu;
983 chan->omtu = pchan->omtu;
b4450035 984 chan->conf_state = pchan->conf_state;
0c1bc5c6 985 chan->mode = pchan->mode;
47d1ec61
GP
986 chan->fcs = pchan->fcs;
987 chan->max_tx = pchan->max_tx;
988 chan->tx_win = pchan->tx_win;
6b3c7104 989 chan->tx_win_max = pchan->tx_win_max;
4343478f 990 chan->sec_level = pchan->sec_level;
d57b0e8b 991 chan->flags = pchan->flags;
6230c9b4
PM
992
993 security_sk_clone(parent, sk);
bb58f747 994 } else {
715ec005
GP
995
996 switch (sk->sk_type) {
997 case SOCK_RAW:
998 chan->chan_type = L2CAP_CHAN_RAW;
999 break;
1000 case SOCK_DGRAM:
1001 chan->chan_type = L2CAP_CHAN_CONN_LESS;
1002 break;
1003 case SOCK_SEQPACKET:
1004 case SOCK_STREAM:
1005 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1006 break;
1007 }
1008
0c1bc5c6
GP
1009 chan->imtu = L2CAP_DEFAULT_MTU;
1010 chan->omtu = 0;
bb58f747 1011 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
0c1bc5c6 1012 chan->mode = L2CAP_MODE_ERTM;
c1360a1c 1013 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
bb58f747 1014 } else {
0c1bc5c6 1015 chan->mode = L2CAP_MODE_BASIC;
bb58f747 1016 }
bd4b1653
AE
1017
1018 l2cap_chan_set_defaults(chan);
bb58f747
GP
1019 }
1020
1021 /* Default config options */
0c1bc5c6 1022 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
80808e43
GP
1023
1024 chan->data = sk;
1025 chan->ops = &l2cap_chan_ops;
bb58f747
GP
1026}
1027
1028static struct proto l2cap_proto = {
1029 .name = "L2CAP",
1030 .owner = THIS_MODULE,
1031 .obj_size = sizeof(struct l2cap_pinfo)
1032};
1033
80808e43 1034static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
bb58f747
GP
1035{
1036 struct sock *sk;
dc50a06d 1037 struct l2cap_chan *chan;
bb58f747
GP
1038
1039 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1040 if (!sk)
1041 return NULL;
1042
1043 sock_init_data(sock, sk);
1044 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1045
1046 sk->sk_destruct = l2cap_sock_destruct;
ba13ccd9 1047 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
bb58f747
GP
1048
1049 sock_reset_flag(sk, SOCK_ZAPPED);
1050
1051 sk->sk_protocol = proto;
1052 sk->sk_state = BT_OPEN;
1053
eef1d9b6 1054 chan = l2cap_chan_create();
dc50a06d
GP
1055 if (!chan) {
1056 l2cap_sock_kill(sk);
1057 return NULL;
1058 }
1059
eef1d9b6
GP
1060 chan->sk = sk;
1061
dc50a06d
GP
1062 l2cap_pi(sk)->chan = chan;
1063
bb58f747
GP
1064 return sk;
1065}
1066
1067static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1068 int kern)
1069{
1070 struct sock *sk;
1071
1072 BT_DBG("sock %p", sock);
1073
1074 sock->state = SS_UNCONNECTED;
1075
1076 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1077 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1078 return -ESOCKTNOSUPPORT;
1079
1080 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1081 return -EPERM;
1082
1083 sock->ops = &l2cap_sock_ops;
1084
1085 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1086 if (!sk)
1087 return -ENOMEM;
1088
1089 l2cap_sock_init(sk, NULL);
1090 return 0;
1091}
1092
cf2f90f5 1093static const struct proto_ops l2cap_sock_ops = {
65390587
GP
1094 .family = PF_BLUETOOTH,
1095 .owner = THIS_MODULE,
1096 .release = l2cap_sock_release,
1097 .bind = l2cap_sock_bind,
1098 .connect = l2cap_sock_connect,
1099 .listen = l2cap_sock_listen,
1100 .accept = l2cap_sock_accept,
1101 .getname = l2cap_sock_getname,
1102 .sendmsg = l2cap_sock_sendmsg,
1103 .recvmsg = l2cap_sock_recvmsg,
1104 .poll = bt_sock_poll,
1105 .ioctl = bt_sock_ioctl,
1106 .mmap = sock_no_mmap,
1107 .socketpair = sock_no_socketpair,
1108 .shutdown = l2cap_sock_shutdown,
1109 .setsockopt = l2cap_sock_setsockopt,
1110 .getsockopt = l2cap_sock_getsockopt
1111};
1112
bb58f747
GP
1113static const struct net_proto_family l2cap_sock_family_ops = {
1114 .family = PF_BLUETOOTH,
1115 .owner = THIS_MODULE,
1116 .create = l2cap_sock_create,
1117};
1118
1119int __init l2cap_init_sockets(void)
1120{
e2174ca4 1121 int err;
bb58f747 1122
e2174ca4
GP
1123 err = proto_register(&l2cap_proto, 0);
1124 if (err < 0)
1125 return err;
bb58f747 1126
e2174ca4
GP
1127 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1128 if (err < 0)
1129 goto error;
bb58f747 1130
e2174ca4 1131 BT_INFO("L2CAP socket layer initialized");
bb58f747 1132
e2174ca4 1133 return 0;
bb58f747
GP
1134
1135error:
e2174ca4
GP
1136 BT_ERR("L2CAP socket registration failed");
1137 proto_unregister(&l2cap_proto);
1138 return err;
bb58f747
GP
1139}
1140
1141void l2cap_cleanup_sockets(void)
1142{
e2174ca4
GP
1143 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1144 BT_ERR("L2CAP socket unregistration failed");
bb58f747 1145
e2174ca4 1146 proto_unregister(&l2cap_proto);
bb58f747 1147}
This page took 0.149602 seconds and 5 git commands to generate.