Lines Matching refs:sk
46 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
85 struct sock *sk = sock->sk; in l2cap_sock_bind() local
86 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_bind()
90 BT_DBG("sk %p", sk); in l2cap_sock_bind()
113 lock_sock(sk); in l2cap_sock_bind()
115 if (sk->sk_state != BT_OPEN) { in l2cap_sock_bind()
174 sk->sk_state = BT_BOUND; in l2cap_sock_bind()
177 release_sock(sk); in l2cap_sock_bind()
184 struct sock *sk = sock->sk; in l2cap_sock_connect() local
185 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_connect()
190 BT_DBG("sk %p", sk); in l2cap_sock_connect()
192 lock_sock(sk); in l2cap_sock_connect()
193 zapped = sock_flag(sk, SOCK_ZAPPED); in l2cap_sock_connect()
194 release_sock(sk); in l2cap_sock_connect()
258 READ_ONCE(sk->sk_sndtimeo)); in l2cap_sock_connect()
262 lock_sock(sk); in l2cap_sock_connect()
264 err = bt_sock_wait_state(sk, BT_CONNECTED, in l2cap_sock_connect()
265 sock_sndtimeo(sk, flags & O_NONBLOCK)); in l2cap_sock_connect()
267 release_sock(sk); in l2cap_sock_connect()
274 struct sock *sk = sock->sk; in l2cap_sock_listen() local
275 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_listen()
278 BT_DBG("sk %p backlog %d", sk, backlog); in l2cap_sock_listen()
280 lock_sock(sk); in l2cap_sock_listen()
282 if (sk->sk_state != BT_BOUND) { in l2cap_sock_listen()
287 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { in l2cap_sock_listen()
312 sk->sk_max_ack_backlog = backlog; in l2cap_sock_listen()
313 sk->sk_ack_backlog = 0; in l2cap_sock_listen()
322 sk->sk_state = BT_LISTEN; in l2cap_sock_listen()
325 release_sock(sk); in l2cap_sock_listen()
333 struct sock *sk = sock->sk, *nsk; in l2cap_sock_accept() local
337 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
339 timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); in l2cap_sock_accept()
341 BT_DBG("sk %p timeo %ld", sk, timeo); in l2cap_sock_accept()
344 add_wait_queue_exclusive(sk_sleep(sk), &wait); in l2cap_sock_accept()
346 if (sk->sk_state != BT_LISTEN) { in l2cap_sock_accept()
351 nsk = bt_accept_dequeue(sk, newsock); in l2cap_sock_accept()
370 release_sock(sk); in l2cap_sock_accept()
374 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_accept()
376 remove_wait_queue(sk_sleep(sk), &wait); in l2cap_sock_accept()
386 release_sock(sk); in l2cap_sock_accept()
394 struct sock *sk = sock->sk; in l2cap_sock_getname() local
395 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getname()
397 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_getname()
399 if (peer && sk->sk_state != BT_CONNECTED && in l2cap_sock_getname()
400 sk->sk_state != BT_CONNECT && sk->sk_state != BT_CONNECT2 && in l2cap_sock_getname()
401 sk->sk_state != BT_CONFIG) in l2cap_sock_getname()
443 struct sock *sk = sock->sk; in l2cap_sock_getsockopt_old() local
444 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt_old()
451 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt_old()
456 lock_sock(sk); in l2cap_sock_getsockopt_old()
534 if (sk->sk_state != BT_CONNECTED && in l2cap_sock_getsockopt_old()
535 !(sk->sk_state == BT_CONNECT2 && in l2cap_sock_getsockopt_old()
536 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in l2cap_sock_getsockopt_old()
556 release_sock(sk); in l2cap_sock_getsockopt_old()
563 struct sock *sk = sock->sk; in l2cap_sock_getsockopt() local
564 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_getsockopt()
570 BT_DBG("sk %p", sk); in l2cap_sock_getsockopt()
581 lock_sock(sk); in l2cap_sock_getsockopt()
596 if (sk->sk_state == BT_CONNECTED) in l2cap_sock_getsockopt()
609 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_getsockopt()
614 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in l2cap_sock_getsockopt()
628 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM in l2cap_sock_getsockopt()
629 && sk->sk_type != SOCK_RAW) { in l2cap_sock_getsockopt()
653 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_getsockopt()
673 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_getsockopt()
710 release_sock(sk); in l2cap_sock_getsockopt()
733 struct sock *sk = sock->sk; in l2cap_sock_setsockopt_old() local
734 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt_old()
739 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt_old()
741 lock_sock(sk); in l2cap_sock_setsockopt_old()
750 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt_old()
841 release_sock(sk); in l2cap_sock_setsockopt_old()
887 struct sock *sk = sock->sk; in l2cap_sock_setsockopt() local
888 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_setsockopt()
897 BT_DBG("sk %p", sk); in l2cap_sock_setsockopt()
905 lock_sock(sk); in l2cap_sock_setsockopt()
943 sk->sk_state = BT_CONFIG; in l2cap_sock_setsockopt()
947 } else if ((sk->sk_state == BT_CONNECT2 && in l2cap_sock_setsockopt()
948 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || in l2cap_sock_setsockopt()
949 sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
951 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
953 sk->sk_state_change(sk); in l2cap_sock_setsockopt()
960 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in l2cap_sock_setsockopt()
970 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
973 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in l2cap_sock_setsockopt()
1038 if (sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
1057 sk->sk_state == BT_CONNECTED) { in l2cap_sock_setsockopt()
1067 sk->sk_state == BT_CONNECTED) in l2cap_sock_setsockopt()
1075 if (sk->sk_state != BT_CONNECTED) { in l2cap_sock_setsockopt()
1098 BT_DBG("sk->sk_state %u", sk->sk_state); in l2cap_sock_setsockopt()
1100 if (sk->sk_state != BT_BOUND) { in l2cap_sock_setsockopt()
1130 release_sock(sk); in l2cap_sock_setsockopt()
1137 struct sock *sk = sock->sk; in l2cap_sock_sendmsg() local
1138 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_sendmsg()
1142 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_sendmsg()
1144 err = sock_error(sk); in l2cap_sock_sendmsg()
1151 if (sk->sk_state != BT_CONNECTED) in l2cap_sock_sendmsg()
1154 hci_sockcm_init(&sockc, sk); in l2cap_sock_sendmsg()
1157 err = sock_cmsg_send(sk, msg, &sockc); in l2cap_sock_sendmsg()
1162 lock_sock(sk); in l2cap_sock_sendmsg()
1163 err = bt_sock_wait_ready(sk, msg->msg_flags); in l2cap_sock_sendmsg()
1164 release_sock(sk); in l2cap_sock_sendmsg()
1177 struct sock *sk = chan->data; in l2cap_publish_rx_avail() local
1178 ssize_t avail = sk->sk_rcvbuf - atomic_read(&sk->sk_rmem_alloc); in l2cap_publish_rx_avail()
1206 struct sock *sk = sock->sk; in l2cap_sock_recvmsg() local
1207 struct l2cap_pinfo *pi = l2cap_pi(sk); in l2cap_sock_recvmsg()
1211 return sock_recv_errqueue(sk, msg, len, SOL_BLUETOOTH, in l2cap_sock_recvmsg()
1214 lock_sock(sk); in l2cap_sock_recvmsg()
1216 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, in l2cap_sock_recvmsg()
1217 &bt_sk(sk)->flags)) { in l2cap_sock_recvmsg()
1219 sk->sk_state = BT_CONNECTED; in l2cap_sock_recvmsg()
1223 sk->sk_state = BT_CONNECTED; in l2cap_sock_recvmsg()
1227 sk->sk_state = BT_CONFIG; in l2cap_sock_recvmsg()
1236 release_sock(sk); in l2cap_sock_recvmsg()
1248 lock_sock(sk); in l2cap_sock_recvmsg()
1258 if (__sock_queue_rcv_skb(sk, rx_busy->skb) < 0) in l2cap_sock_recvmsg()
1269 atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) in l2cap_sock_recvmsg()
1273 release_sock(sk); in l2cap_sock_recvmsg()
1280 static void l2cap_sock_kill(struct sock *sk) in l2cap_sock_kill() argument
1282 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) in l2cap_sock_kill()
1285 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); in l2cap_sock_kill()
1290 l2cap_pi(sk)->chan->data = NULL; in l2cap_sock_kill()
1293 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_kill()
1294 sock_set_flag(sk, SOCK_DEAD); in l2cap_sock_kill()
1295 sock_put(sk); in l2cap_sock_kill()
1298 static int __l2cap_wait_ack(struct sock *sk, struct l2cap_chan *chan) in __l2cap_wait_ack() argument
1306 add_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1321 release_sock(sk); in __l2cap_wait_ack()
1323 lock_sock(sk); in __l2cap_wait_ack()
1326 err = sock_error(sk); in __l2cap_wait_ack()
1339 remove_wait_queue(sk_sleep(sk), &wait); in __l2cap_wait_ack()
1345 struct sock *sk = sock->sk; in l2cap_sock_shutdown() local
1350 BT_DBG("sock %p, sk %p, how %d", sock, sk, how); in l2cap_sock_shutdown()
1359 if (!sk) in l2cap_sock_shutdown()
1362 lock_sock(sk); in l2cap_sock_shutdown()
1364 if ((sk->sk_shutdown & how) == how) in l2cap_sock_shutdown()
1370 sock_hold(sk); in l2cap_sock_shutdown()
1373 chan = l2cap_chan_hold_unless_zero(l2cap_pi(sk)->chan); in l2cap_sock_shutdown()
1382 err = __l2cap_wait_ack(sk, chan); in l2cap_sock_shutdown()
1388 if ((sk->sk_shutdown & how) == how) in l2cap_sock_shutdown()
1395 if ((how & RCV_SHUTDOWN) && !(sk->sk_shutdown & RCV_SHUTDOWN)) { in l2cap_sock_shutdown()
1396 sk->sk_shutdown |= RCV_SHUTDOWN; in l2cap_sock_shutdown()
1397 if ((sk->sk_shutdown & how) == how) in l2cap_sock_shutdown()
1401 sk->sk_shutdown |= SEND_SHUTDOWN; in l2cap_sock_shutdown()
1402 release_sock(sk); in l2cap_sock_shutdown()
1422 lock_sock(sk); in l2cap_sock_shutdown()
1424 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in l2cap_sock_shutdown()
1426 err = bt_sock_wait_state(sk, BT_CLOSED, in l2cap_sock_shutdown()
1427 sk->sk_lingertime); in l2cap_sock_shutdown()
1431 sock_put(sk); in l2cap_sock_shutdown()
1434 if (!err && sk->sk_err) in l2cap_sock_shutdown()
1435 err = -sk->sk_err; in l2cap_sock_shutdown()
1437 release_sock(sk); in l2cap_sock_shutdown()
1446 struct sock *sk = sock->sk; in l2cap_sock_release() local
1450 BT_DBG("sock %p, sk %p", sock, sk); in l2cap_sock_release()
1452 if (!sk) in l2cap_sock_release()
1455 lock_sock_nested(sk, L2CAP_NESTING_PARENT); in l2cap_sock_release()
1456 l2cap_sock_cleanup_listen(sk); in l2cap_sock_release()
1457 release_sock(sk); in l2cap_sock_release()
1459 bt_sock_unlink(&l2cap_sk_list, sk); in l2cap_sock_release()
1462 chan = l2cap_pi(sk)->chan; in l2cap_sock_release()
1467 sock_orphan(sk); in l2cap_sock_release()
1468 l2cap_sock_kill(sk); in l2cap_sock_release()
1478 struct sock *sk; in l2cap_sock_cleanup_listen() local
1507 while ((sk = bt_accept_dequeue(parent, NULL))) { in l2cap_sock_cleanup_listen()
1510 lock_sock_nested(sk, L2CAP_NESTING_NORMAL); in l2cap_sock_cleanup_listen()
1511 chan = l2cap_chan_hold_unless_zero(l2cap_pi(sk)->chan); in l2cap_sock_cleanup_listen()
1512 release_sock(sk); in l2cap_sock_cleanup_listen()
1515 sock_put(sk); in l2cap_sock_cleanup_listen()
1532 sock_put(sk); in l2cap_sock_cleanup_listen()
1538 struct sock *sk, *parent = chan->data; in l2cap_sock_new_connection_cb() local
1552 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, in l2cap_sock_new_connection_cb()
1554 if (!sk) { in l2cap_sock_new_connection_cb()
1559 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); in l2cap_sock_new_connection_cb()
1561 l2cap_sock_init(sk, parent); in l2cap_sock_new_connection_cb()
1563 bt_accept_enqueue(parent, sk, false); in l2cap_sock_new_connection_cb()
1567 return l2cap_pi(sk)->chan; in l2cap_sock_new_connection_cb()
1572 struct sock *sk; in l2cap_sock_recv_cb() local
1576 sk = chan->data; in l2cap_sock_recv_cb()
1577 if (!sk) in l2cap_sock_recv_cb()
1580 pi = l2cap_pi(sk); in l2cap_sock_recv_cb()
1581 lock_sock(sk); in l2cap_sock_recv_cb()
1594 err = sk_filter(sk, skb); in l2cap_sock_recv_cb()
1599 err = __sock_queue_rcv_skb(sk, skb); in l2cap_sock_recv_cb()
1628 release_sock(sk); in l2cap_sock_recv_cb()
1635 struct sock *sk = chan->data; in l2cap_sock_close_cb() local
1637 if (!sk) in l2cap_sock_close_cb()
1640 l2cap_sock_kill(sk); in l2cap_sock_close_cb()
1645 struct sock *sk = chan->data; in l2cap_sock_teardown_cb() local
1648 if (!sk) in l2cap_sock_teardown_cb()
1660 lock_sock_nested(sk, atomic_read(&chan->nesting)); in l2cap_sock_teardown_cb()
1662 parent = bt_sk(sk)->parent; in l2cap_sock_teardown_cb()
1670 l2cap_sock_cleanup_listen(sk); in l2cap_sock_teardown_cb()
1671 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1676 sk->sk_state = BT_CLOSED; in l2cap_sock_teardown_cb()
1679 sk->sk_err = err; in l2cap_sock_teardown_cb()
1682 bt_accept_unlink(sk); in l2cap_sock_teardown_cb()
1685 sk->sk_state_change(sk); in l2cap_sock_teardown_cb()
1690 release_sock(sk); in l2cap_sock_teardown_cb()
1693 sock_set_flag(sk, SOCK_ZAPPED); in l2cap_sock_teardown_cb()
1700 struct sock *sk = chan->data; in l2cap_sock_state_change_cb() local
1702 if (!sk) in l2cap_sock_state_change_cb()
1705 sk->sk_state = state; in l2cap_sock_state_change_cb()
1708 sk->sk_err = err; in l2cap_sock_state_change_cb()
1715 struct sock *sk = chan->data; in l2cap_sock_alloc_skb_cb() local
1720 skb = bt_skb_send_alloc(sk, hdr_len + len, nb, &err); in l2cap_sock_alloc_skb_cb()
1734 skb->priority = READ_ONCE(sk->sk_priority); in l2cap_sock_alloc_skb_cb()
1743 struct sock *sk = chan->data; in l2cap_sock_ready_cb() local
1746 if (!sk) in l2cap_sock_ready_cb()
1749 lock_sock(sk); in l2cap_sock_ready_cb()
1751 parent = bt_sk(sk)->parent; in l2cap_sock_ready_cb()
1753 BT_DBG("sk %p, parent %p", sk, parent); in l2cap_sock_ready_cb()
1755 sk->sk_state = BT_CONNECTED; in l2cap_sock_ready_cb()
1756 sk->sk_state_change(sk); in l2cap_sock_ready_cb()
1761 release_sock(sk); in l2cap_sock_ready_cb()
1766 struct sock *parent, *sk = chan->data; in l2cap_sock_defer_cb() local
1768 lock_sock(sk); in l2cap_sock_defer_cb()
1770 parent = bt_sk(sk)->parent; in l2cap_sock_defer_cb()
1774 release_sock(sk); in l2cap_sock_defer_cb()
1779 struct sock *sk = chan->data; in l2cap_sock_resume_cb() local
1781 if (!sk) in l2cap_sock_resume_cb()
1785 sk->sk_state = BT_CONNECTED; in l2cap_sock_resume_cb()
1789 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_resume_cb()
1790 sk->sk_state_change(sk); in l2cap_sock_resume_cb()
1795 struct sock *sk = chan->data; in l2cap_sock_set_shutdown_cb() local
1797 lock_sock(sk); in l2cap_sock_set_shutdown_cb()
1798 sk->sk_shutdown = SHUTDOWN_MASK; in l2cap_sock_set_shutdown_cb()
1799 release_sock(sk); in l2cap_sock_set_shutdown_cb()
1804 struct sock *sk = chan->data; in l2cap_sock_get_sndtimeo_cb() local
1806 if (!sk) in l2cap_sock_get_sndtimeo_cb()
1809 return READ_ONCE(sk->sk_sndtimeo); in l2cap_sock_get_sndtimeo_cb()
1814 struct sock *sk = chan->data; in l2cap_sock_get_peer_pid_cb() local
1816 return sk->sk_peer_pid; in l2cap_sock_get_peer_pid_cb()
1821 struct sock *sk = chan->data; in l2cap_sock_suspend_cb() local
1823 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); in l2cap_sock_suspend_cb()
1824 sk->sk_state_change(sk); in l2cap_sock_suspend_cb()
1829 struct sock *sk = chan->data; in l2cap_sock_filter() local
1834 return sk_filter(sk, skb); in l2cap_sock_filter()
1858 static void l2cap_sock_destruct(struct sock *sk) in l2cap_sock_destruct() argument
1862 BT_DBG("sk %p", sk); in l2cap_sock_destruct()
1864 if (l2cap_pi(sk)->chan) { in l2cap_sock_destruct()
1865 l2cap_pi(sk)->chan->data = NULL; in l2cap_sock_destruct()
1866 l2cap_chan_put(l2cap_pi(sk)->chan); in l2cap_sock_destruct()
1869 list_for_each_entry_safe(rx_busy, next, &l2cap_pi(sk)->rx_busy, list) { in l2cap_sock_destruct()
1875 skb_queue_purge(&sk->sk_receive_queue); in l2cap_sock_destruct()
1876 skb_queue_purge(&sk->sk_write_queue); in l2cap_sock_destruct()
1877 skb_queue_purge(&sk->sk_error_queue); in l2cap_sock_destruct()
1893 static void l2cap_sock_init(struct sock *sk, struct sock *parent) in l2cap_sock_init() argument
1895 struct l2cap_chan *chan = l2cap_pi(sk)->chan; in l2cap_sock_init()
1897 BT_DBG("sk %p", sk); in l2cap_sock_init()
1902 sk->sk_type = parent->sk_type; in l2cap_sock_init()
1903 bt_sk(sk)->flags = bt_sk(parent)->flags; in l2cap_sock_init()
1924 security_sk_clone(parent, sk); in l2cap_sock_init()
1926 switch (sk->sk_type) { in l2cap_sock_init()
1932 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name; in l2cap_sock_init()
1942 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { in l2cap_sock_init()
1955 chan->data = sk; in l2cap_sock_init()
1970 struct sock *sk; in l2cap_sock_alloc() local
1973 sk = bt_sock_alloc(net, sock, &l2cap_proto, proto, prio, kern); in l2cap_sock_alloc()
1974 if (!sk) in l2cap_sock_alloc()
1977 sk->sk_destruct = l2cap_sock_destruct; in l2cap_sock_alloc()
1978 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; in l2cap_sock_alloc()
1980 INIT_LIST_HEAD(&l2cap_pi(sk)->rx_busy); in l2cap_sock_alloc()
1984 sk_free(sk); in l2cap_sock_alloc()
1986 sock->sk = NULL; in l2cap_sock_alloc()
1992 l2cap_pi(sk)->chan = chan; in l2cap_sock_alloc()
1994 return sk; in l2cap_sock_alloc()
2000 struct sock *sk; in l2cap_sock_create() local
2015 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in l2cap_sock_create()
2016 if (!sk) in l2cap_sock_create()
2019 l2cap_sock_init(sk, NULL); in l2cap_sock_create()
2020 bt_sock_link(&l2cap_sk_list, sk); in l2cap_sock_create()