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