Lines Matching refs:nlk

342 	struct netlink_sock *nlk = nlk_sk(sk);  in netlink_overrun()  local
344 if (!(nlk->flags & NETLINK_F_RECV_NO_ENOBUFS)) { in netlink_overrun()
356 struct netlink_sock *nlk = nlk_sk(sk); in netlink_rcv_wake() local
359 clear_bit(NETLINK_S_CONGESTED, &nlk->state); in netlink_rcv_wake()
360 if (!test_bit(NETLINK_S_CONGESTED, &nlk->state)) in netlink_rcv_wake()
361 wake_up_interruptible(&nlk->wait); in netlink_rcv_wake()
388 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sock_destruct() local
390 if (nlk->cb_running) { in netlink_sock_destruct()
391 if (nlk->cb.done) in netlink_sock_destruct()
392 nlk->cb.done(&nlk->cb); in netlink_sock_destruct()
393 module_put(nlk->cb.module); in netlink_sock_destruct()
394 kfree_skb(nlk->cb.skb); in netlink_sock_destruct()
411 struct netlink_sock *nlk = container_of(work, struct netlink_sock, in netlink_sock_destruct_work() local
414 sk_free(&nlk->sk); in netlink_sock_destruct_work()
488 const struct netlink_sock *nlk = ptr; in netlink_compare() local
490 return nlk->portid != x->portid || in netlink_compare()
491 !net_eq(sock_net(&nlk->sk), read_pnet(&x->pnet)); in netlink_compare()
633 struct netlink_sock *nlk; in __netlink_create() local
643 nlk = nlk_sk(sk); in __netlink_create()
645 nlk->cb_mutex = cb_mutex; in __netlink_create()
647 nlk->cb_mutex = &nlk->cb_def_mutex; in __netlink_create()
648 mutex_init(nlk->cb_mutex); in __netlink_create()
649 lockdep_set_class_and_name(nlk->cb_mutex, in __netlink_create()
653 init_waitqueue_head(&nlk->wait); in __netlink_create()
665 struct netlink_sock *nlk; in netlink_create() local
708 nlk = nlk_sk(sock->sk); in netlink_create()
709 nlk->module = module; in netlink_create()
710 nlk->netlink_bind = bind; in netlink_create()
711 nlk->netlink_unbind = unbind; in netlink_create()
722 struct netlink_sock *nlk = container_of(head, struct netlink_sock, rcu); in deferred_put_nlk_sk() local
723 struct sock *sk = &nlk->sk; in deferred_put_nlk_sk()
725 kfree(nlk->groups); in deferred_put_nlk_sk()
726 nlk->groups = NULL; in deferred_put_nlk_sk()
731 if (nlk->cb_running && nlk->cb.done) { in deferred_put_nlk_sk()
732 INIT_WORK(&nlk->work, netlink_sock_destruct_work); in deferred_put_nlk_sk()
733 schedule_work(&nlk->work); in deferred_put_nlk_sk()
743 struct netlink_sock *nlk; in netlink_release() local
750 nlk = nlk_sk(sk); in netlink_release()
760 if (nlk->netlink_unbind) { in netlink_release()
763 for (i = 0; i < nlk->ngroups; i++) in netlink_release()
764 if (test_bit(i, nlk->groups)) in netlink_release()
765 nlk->netlink_unbind(sock_net(sk), i + 1); in netlink_release()
772 wake_up_interruptible_all(&nlk->wait); in netlink_release()
776 if (nlk->portid && nlk->bound) { in netlink_release()
780 .portid = nlk->portid, in netlink_release()
786 module_put(nlk->module); in netlink_release()
809 call_rcu(&nlk->rcu, deferred_put_nlk_sk); in netlink_release()
926 struct netlink_sock *nlk = nlk_sk(sk); in netlink_update_subscriptions() local
928 if (nlk->subscriptions && !subscriptions) in netlink_update_subscriptions()
930 else if (!nlk->subscriptions && subscriptions) in netlink_update_subscriptions()
932 nlk->subscriptions = subscriptions; in netlink_update_subscriptions()
937 struct netlink_sock *nlk = nlk_sk(sk); in netlink_realloc_groups() local
950 if (nlk->ngroups >= groups) in netlink_realloc_groups()
953 new_groups = krealloc(nlk->groups, NLGRPSZ(groups), GFP_ATOMIC); in netlink_realloc_groups()
958 memset((char *)new_groups + NLGRPSZ(nlk->ngroups), 0, in netlink_realloc_groups()
959 NLGRPSZ(groups) - NLGRPSZ(nlk->ngroups)); in netlink_realloc_groups()
961 nlk->groups = new_groups; in netlink_realloc_groups()
962 nlk->ngroups = groups; in netlink_realloc_groups()
971 struct netlink_sock *nlk = nlk_sk(sk); in netlink_undo_bind() local
974 if (!nlk->netlink_unbind) in netlink_undo_bind()
979 nlk->netlink_unbind(sock_net(sk), undo + 1); in netlink_undo_bind()
987 struct netlink_sock *nlk = nlk_sk(sk); in netlink_bind() local
1009 if (nlk->ngroups < BITS_PER_LONG) in netlink_bind()
1010 groups &= (1UL << nlk->ngroups) - 1; in netlink_bind()
1013 bound = READ_ONCE(nlk->bound); in netlink_bind()
1018 if (nladdr->nl_pid != nlk->portid) in netlink_bind()
1023 if (nlk->netlink_bind && groups) { in netlink_bind()
1030 err = nlk->netlink_bind(net, group + 1); in netlink_bind()
1051 if (!groups && (nlk->groups == NULL || !(u32)nlk->groups[0])) in netlink_bind()
1056 netlink_update_subscriptions(sk, nlk->subscriptions + in netlink_bind()
1058 hweight32(nlk->groups[0])); in netlink_bind()
1059 nlk->groups[0] = (nlk->groups[0] & ~0xffffffffUL) | groups; in netlink_bind()
1075 struct netlink_sock *nlk = nlk_sk(sk); in netlink_connect() local
1083 nlk->dst_portid = 0; in netlink_connect()
1084 nlk->dst_group = 0; in netlink_connect()
1101 if (!READ_ONCE(nlk->bound)) in netlink_connect()
1106 nlk->dst_portid = nladdr->nl_pid; in netlink_connect()
1107 nlk->dst_group = ffs(nladdr->nl_groups); in netlink_connect()
1117 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getname() local
1124 nladdr->nl_pid = nlk->dst_portid; in netlink_getname()
1125 nladdr->nl_groups = netlink_group_mask(nlk->dst_group); in netlink_getname()
1127 nladdr->nl_pid = nlk->portid; in netlink_getname()
1129 nladdr->nl_groups = nlk->groups ? nlk->groups[0] : 0; in netlink_getname()
1146 struct netlink_sock *nlk; in netlink_getsockbyportid() local
1153 nlk = nlk_sk(sock); in netlink_getsockbyportid()
1155 nlk->dst_portid != nlk_sk(ssk)->portid) { in netlink_getsockbyportid()
1216 struct netlink_sock *nlk; in netlink_attachskb() local
1218 nlk = nlk_sk(sk); in netlink_attachskb()
1221 test_bit(NETLINK_S_CONGESTED, &nlk->state))) { in netlink_attachskb()
1232 add_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1235 test_bit(NETLINK_S_CONGESTED, &nlk->state)) && in netlink_attachskb()
1240 remove_wait_queue(&nlk->wait, &wait); in netlink_attachskb()
1305 struct netlink_sock *nlk = nlk_sk(sk); in netlink_unicast_kernel() local
1308 if (nlk->netlink_rcv != NULL) { in netlink_unicast_kernel()
1313 nlk->netlink_rcv(skb); in netlink_unicast_kernel()
1379 const struct netlink_sock *nlk = nlk_sk(NETLINK_CB(skb).sk); in netlink_strict_get_check() local
1381 return nlk->flags & NETLINK_F_STRICT_CHK; in netlink_strict_get_check()
1387 struct netlink_sock *nlk = nlk_sk(sk); in netlink_broadcast_deliver() local
1390 !test_bit(NETLINK_S_CONGESTED, &nlk->state)) { in netlink_broadcast_deliver()
1416 struct netlink_sock *nlk = nlk_sk(sk); in do_one_broadcast() local
1422 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_broadcast()
1423 !test_bit(p->group - 1, nlk->groups)) in do_one_broadcast()
1427 if (!(nlk->flags & NETLINK_F_LISTEN_ALL_NSID)) in do_one_broadcast()
1460 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR) in do_one_broadcast()
1480 if (nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR) in do_one_broadcast()
1559 struct netlink_sock *nlk = nlk_sk(sk); in do_one_set_err() local
1568 if (nlk->portid == p->portid || p->group - 1 >= nlk->ngroups || in do_one_set_err()
1569 !test_bit(p->group - 1, nlk->groups)) in do_one_set_err()
1572 if (p->code == ENOBUFS && nlk->flags & NETLINK_F_RECV_NO_ENOBUFS) { in do_one_set_err()
1616 static void netlink_update_socket_mc(struct netlink_sock *nlk, in netlink_update_socket_mc() argument
1622 old = test_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1623 subscriptions = nlk->subscriptions - old + new; in netlink_update_socket_mc()
1625 __set_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1627 __clear_bit(group - 1, nlk->groups); in netlink_update_socket_mc()
1628 netlink_update_subscriptions(&nlk->sk, subscriptions); in netlink_update_socket_mc()
1629 netlink_update_listeners(&nlk->sk); in netlink_update_socket_mc()
1636 struct netlink_sock *nlk = nlk_sk(sk); in netlink_setsockopt() local
1650 nlk->flags |= NETLINK_F_RECV_PKTINFO; in netlink_setsockopt()
1652 nlk->flags &= ~NETLINK_F_RECV_PKTINFO; in netlink_setsockopt()
1662 if (!val || val - 1 >= nlk->ngroups) in netlink_setsockopt()
1664 if (optname == NETLINK_ADD_MEMBERSHIP && nlk->netlink_bind) { in netlink_setsockopt()
1665 err = nlk->netlink_bind(sock_net(sk), val); in netlink_setsockopt()
1670 netlink_update_socket_mc(nlk, val, in netlink_setsockopt()
1673 if (optname == NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind) in netlink_setsockopt()
1674 nlk->netlink_unbind(sock_net(sk), val); in netlink_setsockopt()
1681 nlk->flags |= NETLINK_F_BROADCAST_SEND_ERROR; in netlink_setsockopt()
1683 nlk->flags &= ~NETLINK_F_BROADCAST_SEND_ERROR; in netlink_setsockopt()
1688 nlk->flags |= NETLINK_F_RECV_NO_ENOBUFS; in netlink_setsockopt()
1689 clear_bit(NETLINK_S_CONGESTED, &nlk->state); in netlink_setsockopt()
1690 wake_up_interruptible(&nlk->wait); in netlink_setsockopt()
1692 nlk->flags &= ~NETLINK_F_RECV_NO_ENOBUFS; in netlink_setsockopt()
1701 nlk->flags |= NETLINK_F_LISTEN_ALL_NSID; in netlink_setsockopt()
1703 nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID; in netlink_setsockopt()
1708 nlk->flags |= NETLINK_F_CAP_ACK; in netlink_setsockopt()
1710 nlk->flags &= ~NETLINK_F_CAP_ACK; in netlink_setsockopt()
1715 nlk->flags |= NETLINK_F_EXT_ACK; in netlink_setsockopt()
1717 nlk->flags &= ~NETLINK_F_EXT_ACK; in netlink_setsockopt()
1722 nlk->flags |= NETLINK_F_STRICT_CHK; in netlink_setsockopt()
1724 nlk->flags &= ~NETLINK_F_STRICT_CHK; in netlink_setsockopt()
1737 struct netlink_sock *nlk = nlk_sk(sk); in netlink_getsockopt() local
1753 val = nlk->flags & NETLINK_F_RECV_PKTINFO ? 1 : 0; in netlink_getsockopt()
1763 val = nlk->flags & NETLINK_F_BROADCAST_SEND_ERROR ? 1 : 0; in netlink_getsockopt()
1773 val = nlk->flags & NETLINK_F_RECV_NO_ENOBUFS ? 1 : 0; in netlink_getsockopt()
1784 for (pos = 0; pos * 8 < nlk->ngroups; pos += sizeof(u32)) { in netlink_getsockopt()
1790 if (put_user((u32)(nlk->groups[idx] >> shift), in netlink_getsockopt()
1796 if (put_user(ALIGN(nlk->ngroups / 8, sizeof(u32)), optlen)) in netlink_getsockopt()
1805 val = nlk->flags & NETLINK_F_CAP_ACK ? 1 : 0; in netlink_getsockopt()
1815 val = nlk->flags & NETLINK_F_EXT_ACK ? 1 : 0; in netlink_getsockopt()
1824 val = nlk->flags & NETLINK_F_STRICT_CHK ? 1 : 0; in netlink_getsockopt()
1856 struct netlink_sock *nlk = nlk_sk(sk); in netlink_sendmsg() local
1891 dst_portid = nlk->dst_portid; in netlink_sendmsg()
1892 dst_group = nlk->dst_group; in netlink_sendmsg()
1896 if (!READ_ONCE(nlk->bound)) { in netlink_sendmsg()
1913 NETLINK_CB(skb).portid = nlk->portid; in netlink_sendmsg()
1946 struct netlink_sock *nlk = nlk_sk(sk); in netlink_recvmsg() local
1981 nlk->max_recvmsg_len = max(nlk->max_recvmsg_len, len); in netlink_recvmsg()
1982 nlk->max_recvmsg_len = min_t(size_t, nlk->max_recvmsg_len, in netlink_recvmsg()
2002 if (nlk->flags & NETLINK_F_RECV_PKTINFO) in netlink_recvmsg()
2004 if (nlk->flags & NETLINK_F_LISTEN_ALL_NSID) in netlink_recvmsg()
2014 if (nlk->cb_running && in netlink_recvmsg()
2046 struct netlink_sock *nlk; in __netlink_kernel_create() local
2080 nlk = nlk_sk(sk); in __netlink_kernel_create()
2081 nlk->flags |= NETLINK_F_KERNEL_SOCKET; in __netlink_kernel_create()
2203 static int netlink_dump_done(struct netlink_sock *nlk, struct sk_buff *skb, in netlink_dump_done() argument
2209 nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(nlk->dump_done_errno), in netlink_dump_done()
2215 memcpy(nlmsg_data(nlh), &nlk->dump_done_errno, sizeof(nlk->dump_done_errno)); in netlink_dump_done()
2217 if (extack->_msg && nlk->flags & NETLINK_F_EXT_ACK) { in netlink_dump_done()
2228 struct netlink_sock *nlk = nlk_sk(sk); in netlink_dump() local
2237 mutex_lock(nlk->cb_mutex); in netlink_dump()
2238 if (!nlk->cb_running) { in netlink_dump()
2251 cb = &nlk->cb; in netlink_dump()
2254 if (alloc_min_size < nlk->max_recvmsg_len) { in netlink_dump()
2255 alloc_size = nlk->max_recvmsg_len; in netlink_dump()
2287 if (nlk->dump_done_errno > 0) { in netlink_dump()
2289 nlk->dump_done_errno = cb->dump(skb, cb); in netlink_dump()
2293 if (nlk->dump_done_errno > 0 || in netlink_dump()
2294 skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) { in netlink_dump()
2295 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2304 if (netlink_dump_done(nlk, skb, cb, &extack)) in netlink_dump()
2313 if (netlink_dump_done(nlk, skb_shinfo(skb)->frag_list, cb, &extack)) in netlink_dump()
2326 nlk->cb_running = false; in netlink_dump()
2329 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2335 mutex_unlock(nlk->cb_mutex); in netlink_dump()
2344 struct netlink_sock *nlk, *nlk2; in __netlink_dump_start() local
2357 nlk = nlk_sk(sk); in __netlink_dump_start()
2358 mutex_lock(nlk->cb_mutex); in __netlink_dump_start()
2360 if (nlk->cb_running) { in __netlink_dump_start()
2370 cb = &nlk->cb; in __netlink_dump_start()
2389 nlk->cb_running = true; in __netlink_dump_start()
2390 nlk->dump_done_errno = INT_MAX; in __netlink_dump_start()
2392 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2410 mutex_unlock(nlk->cb_mutex); in __netlink_dump_start()
2425 struct netlink_sock *nlk = nlk_sk(NETLINK_CB(in_skb).sk); in netlink_ack() local
2427 bool nlk_has_extack = nlk->flags & NETLINK_F_EXT_ACK; in netlink_ack()
2436 if (err && !(nlk->flags & NETLINK_F_CAP_ACK)) in netlink_ack()
2597 struct netlink_sock *nlk; in __netlink_seq_next() local
2601 nlk = rhashtable_walk_next(&iter->hti); in __netlink_seq_next()
2603 if (IS_ERR(nlk)) { in __netlink_seq_next()
2604 if (PTR_ERR(nlk) == -EAGAIN) in __netlink_seq_next()
2607 return nlk; in __netlink_seq_next()
2610 if (nlk) in __netlink_seq_next()
2619 } while (sock_net(&nlk->sk) != seq_file_net(seq)); in __netlink_seq_next()
2621 return nlk; in __netlink_seq_next()
2666 struct netlink_sock *nlk = nlk_sk(s); in netlink_native_seq_show() local
2671 nlk->portid, in netlink_native_seq_show()
2672 nlk->groups ? (u32)nlk->groups[0] : 0, in netlink_native_seq_show()
2675 nlk->cb_running, in netlink_native_seq_show()
2838 const struct netlink_sock *nlk = data; in netlink_hash() local
2841 netlink_compare_arg_init(&arg, sock_net(&nlk->sk), nlk->portid); in netlink_hash()