sk_prot
sk->sk_prot->disconnect(sk, 0);
sk->sk_prot = &tcp_prot;
sk->sk_prot = &tcpv6_prot;
sk->sk_prot->destroy(sk);
sk->sk_prot = &chtls_cpl_prot;
sk->sk_prot = &chtls_cpl_protv6;
sk->sk_prot = peer->tcp.sk_cb.prot;
peer->tcp.sk_cb.prot = ovpn_sock->sk->sk_prot;
ovpn_sock->sk->sk_prot = &ovpn_tcp_prot;
ovpn_sock->sk->sk_prot = &ovpn_tcp6_prot;
(sk)->sk_prot->pre_connect)
if (!(sock)->sk_prot->bpf_bypass_getsockopt || \
!INDIRECT_CALL_INET_1((sock)->sk_prot->bpf_bypass_getsockopt, \
return sk->sk_prot->ioctl(sk, cmd, &karg);
return sk->sk_prot->memory_pressure != NULL;
return proto_memory_pressure(sk->sk_prot);
if (!sk->sk_prot->memory_pressure)
return !!READ_ONCE(*sk->sk_prot->memory_pressure);
return proto_memory_allocated(sk->sk_prot);
struct proto *proto = sk->sk_prot;
struct proto *proto = sk->sk_prot;
return sk->sk_prot->stream_memory_free ?
INDIRECT_CALL_INET_1(sk->sk_prot->stream_memory_free,
percpu_counter_add_batch(sk->sk_prot->sockets_allocated, -1,
percpu_counter_add_batch(sk->sk_prot->sockets_allocated, 1,
return percpu_counter_read_positive(sk->sk_prot->sockets_allocated);
sk->sk_prot->unhash(sk);
return sk->sk_prot->hash(sk);
return READ_ONCE(sk->sk_prot->sysctl_mem[index]);
return !!sk->sk_prot->memory_allocated;
WRITE_ONCE(sk->sk_prot, proto);
const struct proto *prot = READ_ONCE(sk->sk_prot);
struct proto *prot = READ_ONCE(sk->sk_prot);
const struct proto *prot = READ_ONCE(sk->sk_prot);
sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
if (sk->sk_prot->init)
err = sk->sk_prot->init(sk);
sock_prot_inuse_add(net, sk->sk_prot, 1);
sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(net, sk->sk_prot, -1);
if (sk && sk->sk_prot == &tcp_prot && sk->sk_state == TCP_TIME_WAIT)
if (sk && sk->sk_prot == &tcpv6_prot && sk->sk_state == TCP_TIME_WAIT)
if (sk && sk->sk_prot == &tcp_prot && sk->sk_state == TCP_NEW_SYN_RECV)
if (sk && sk->sk_prot == &tcpv6_prot && sk->sk_state == TCP_NEW_SYN_RECV)
if (!sk->sk_prot->diag_destroy || (sk->sk_protocol != IPPROTO_TCP &&
return sk->sk_prot->diag_destroy(sk, ECONNABORTED);
prot = READ_ONCE(sk->sk_prot);
if (sk->sk_prot->keepalive)
sk->sk_prot->keepalive(sk, valbool);
const struct proto *prot = READ_ONCE(osk->sk_prot);
sk->sk_prot = sk->sk_prot_creator = prot;
struct proto *prot = READ_ONCE(sk->sk_prot);
if (newsk->sk_prot->sockets_allocated)
if (!sk->sk_prot->enter_memory_pressure)
sk->sk_prot->enter_memory_pressure(sk);
if (sk->sk_prot->leave_memory_pressure) {
INDIRECT_CALL_INET_1(sk->sk_prot->leave_memory_pressure,
unsigned long *memory_pressure = sk->sk_prot->memory_pressure;
if (sk->sk_prot->release_cb)
INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
struct proto *prot = sk->sk_prot;
if (sk->sk_prot->release_cb)
INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
return READ_ONCE(sk->sk_prot)->getsockopt(sk, level, optname, optval, optlen);
err = sk->sk_prot->recvmsg(sk, msg, size, flags, &addr_len);
return READ_ONCE(sk->sk_prot)->setsockopt(sk, level, optname, optval, optlen);
if (sk->sk_prot->destroy)
sk->sk_prot->destroy(sk);
sk->sk_prot->unhash(sk);
if (!sk->sk_prot->bind_add)
return sk->sk_prot->bind_add(sk, addr, addr_len);
ret = READ_ONCE(sk->sk_prot)->ioctl(sk, cmd, karg);
ret = READ_ONCE(sk->sk_prot)->ioctl(sk, cmd, &karg);
if (sk->sk_prot->rehash)
sk->sk_prot->rehash(sk);
if (sk->sk_prot->keepalive)
sk->sk_prot->keepalive(sk, true);
if (!sk->sk_prot->diag_destroy)
return sk->sk_prot->diag_destroy(sk, err);
saved_unhash = READ_ONCE(sk->sk_prot)->unhash;
saved_destroy = READ_ONCE(sk->sk_prot)->destroy;
saved_close = READ_ONCE(sk->sk_prot)->close;
if (!sk->sk_prot->psock_update_sk_prot)
psock->psock_update_sk_prot = sk->sk_prot->psock_update_sk_prot;
return sk->sk_prot->psock_update_sk_prot(sk, psock, false);
if (sk->sk_prot->close != sock_map_close) {
return !!sk->sk_prot->psock_update_sk_prot;
if (sk->sk_prot->bind)
if (sk->sk_prot->hash) {
rc = sk->sk_prot->hash(sk);
return sk->sk_prot->bind(sk, uaddr, addr_len);
if (sk->sk_prot->init) {
rc = sk->sk_prot->init(sk);
return sk->sk_prot->disconnect(sk, flags);
return sk->sk_prot->connect(sk, uaddr, addr_len);
if (!sk->sk_prot->ioctl)
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sk->sk_prot->close(sk, 0);
return sk->sk_prot->sendmsg(sk, msg, len);
if (sk->sk_prot->ioctl)
if (!sk->sk_prot->compat_ioctl)
return sk->sk_prot->compat_ioctl(sk, cmd, arg);
(*sk)->sk_prot->unhash(*sk);
if (sk->sk_prot->get_port(sk, 0)) {
sk->sk_backlog_rcv = sk->sk_prot->backlog_rcv;
err = sk->sk_prot->hash(sk);
if (sk->sk_prot->init) {
err = sk->sk_prot->init(sk);
sk->sk_prot->close(sk, timeout);
if (sk->sk_prot->bind) {
return sk->sk_prot->bind(sk, uaddr, addr_len);
err = sk->sk_prot->get_port(sk, snum);
if (sk->sk_prot->put_port)
sk->sk_prot->put_port(sk);
prot = READ_ONCE(sk->sk_prot);
err = sk->sk_prot->disconnect(sk, flags);
err = sk->sk_prot->pre_connect(sk, uaddr, addr_len);
err = sk->sk_prot->connect(sk, uaddr, addr_len);
if (sk->sk_prot->disconnect(sk, flags))
sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, arg);
if (data_race(!inet_sk(sk)->inet_num) && !sk->sk_prot->no_autobind &&
return INDIRECT_CALL_2(sk->sk_prot->sendmsg, tcp_sendmsg, udp_sendmsg,
prot = READ_ONCE(sk->sk_prot);
err = INDIRECT_CALL_2(sk->sk_prot->recvmsg, tcp_recvmsg, udp_recvmsg,
if (sk->sk_prot->shutdown)
sk->sk_prot->shutdown(sk, how);
err = sk->sk_prot->disconnect(sk, O_NONBLOCK);
if (sk->sk_prot->rehash)
sk->sk_prot->rehash(sk);
sk->sk_prot->destroy(sk);
err = sk->sk_prot->get_port(sk, inet->inet_num);
err = sk->sk_prot->hash(sk);
sk->sk_prot->disconnect(child, O_NONBLOCK);
req_to_sk(req)->sk_prot = sk_listener->sk_prot;
sock_prot_inuse_add(net, sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(net, sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
struct raw_hashinfo *h = sk->sk_prot->h.raw_hash;
sk->sk_prot->unhash(sk);
sk->sk_prot->disconnect(sk, 0);
sk->sk_prot->disconnect(sk, 0);
WRITE_ONCE(sk->sk_prot->unhash, psock->saved_unhash);
struct proto *prot = newsk->sk_prot;
newsk->sk_prot = sk->sk_prot_creator;
return sk->sk_prot->h.udp_table ? : sock_net(sk)->ipv4.udp_table;
if (sk->sk_prot->rehash &&
sk->sk_prot->rehash(sk);
sk->sk_prot->unhash(sk);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
const int offset = sk->sk_prot->ipv6_pinfo_offset;
err = sk->sk_prot->hash(sk);
if (sk->sk_prot->init) {
err = sk->sk_prot->init(sk);
err = sk->sk_prot->get_port(sk, snum);
if (sk->sk_prot->put_port)
sk->sk_prot->put_port(sk);
prot = READ_ONCE(sk->sk_prot);
prot = READ_ONCE(sk->sk_prot);
prot = READ_ONCE(sk->sk_prot);
prot = READ_ONCE(sk->sk_prot);
if (sk->sk_prot->rehash)
sk->sk_prot->rehash(sk);
if (sk->sk_prot->rehash)
sk->sk_prot->rehash(sk);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
if (sk->sk_prot != &tcpv6_prot) {
sock_prot_inuse_add(net, sk->sk_prot, -1);
WRITE_ONCE(sk->sk_prot, &tcp_prot);
sock_prot_inuse_add(net, sk->sk_prot, -1);
WRITE_ONCE(sk->sk_prot, prot);
sk->sk_prot, 0);
rc = sk->sk_prot->hash(sk);
sk->sk_prot->close(sk, 0);
if (sk->sk_prot->init)
rc = sk->sk_prot->init(sk);
sk->sk_prot->destroy(sk);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
err = ssk->sk_prot->pre_connect(ssk, uaddr, addr_len);
err = ssk->sk_prot->connect(ssk, uaddr, addr_len);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
if (ssk->sk_prot->keepalive)
ssk->sk_prot->keepalive(ssk, keep_open);
if (ssk->sk_prot->keepalive)
ssk->sk_prot->keepalive(ssk, !!val);
if (ssk->sk_prot == &tcpv6_prot)
ssk->sk_prot = &tcpv6_prot_override;
ssk->sk_prot = &tcp_prot_override;
if (ssk->sk_prot == &tcpv6_prot_override)
ssk->sk_prot = &tcpv6_prot;
ssk->sk_prot = &tcp_prot;
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sk->sk_prot = &tcp_prot;
sk = sk_alloc(sock_net(osk), PF_NETROM, GFP_ATOMIC, osk->sk_prot, 0);
sock_prot_inuse_add(net, sk->sk_prot, -1);
sk->sk_prot->init(sk);
sk->sk_backlog_rcv = sk->sk_prot->backlog_rcv;
newsk = sk_alloc(sock_net(sk), PF_PHONET, GFP_KERNEL, sk->sk_prot,
if (sk->sk_prot->bind)
return sk->sk_prot->bind(sk, addr, len);
err = sk->sk_prot->get_port(sk, pn_port(handle));
err = sk->sk_prot->hash(sk);
err = sk->sk_prot->connect(sk, addr, len);
newsk = sk->sk_prot->accept(sk, arg);
sk->sk_prot->close(sk, 0);
return sk->sk_prot->sendmsg(sk, m, total_len);
sock_prot_inuse_add(sock_net(sk), newsk->sk_prot, 1);
sock_prot_inuse_add(net, sk->sk_prot, 1);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
smc->clcsock->sk->sk_prot->keepalive(smc->clcsock->sk, val);
new_sk->sk_prot->unhash(new_sk);
new_sk->sk_prot->unhash(new_sk);
struct smc_hashinfo *h = sk->sk_prot->h.smc_hash;
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
struct smc_hashinfo *h = sk->sk_prot->h.smc_hash;
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sk->sk_prot->unhash(sk);
sk->sk_prot->hash(sk);
READ_ONCE(sk->sk_prot)->enter_memory_pressure(sk);
WARN_ON_ONCE(sk->sk_prot == p);
WRITE_ONCE(sk->sk_prot, p);
WRITE_ONCE(sk->sk_prot,
WRITE_ONCE(sk->sk_prot, ctx->sk_proto);
ctx->sk_proto = READ_ONCE(sk->sk_prot);
struct proto *prot = READ_ONCE(sk->sk_prot);
sock_prot_inuse_add(net, sk->sk_prot, 1);
sk->sk_prot->close(sk, 0);
const struct proto *prot = READ_ONCE(sk->sk_prot);
const struct proto *prot = READ_ONCE(sk->sk_prot);
const struct proto *prot = READ_ONCE(other->sk_prot);
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
sk->sk_prot->close(sk, 0);
prot = READ_ONCE(sk->sk_prot);
prot = READ_ONCE(sk->sk_prot);
sock_prot_inuse_add(net, sk->sk_prot, -1);
return sk->sk_prot == &espintcp_prot || sk->sk_prot == &espintcp6_prot;
sk->sk_prot = &espintcp_prot;
build_protos(&espintcp6_prot, &espintcp6_ops, sk->sk_prot, sk->sk_socket->ops);
sk->sk_prot = &espintcp6_prot;
sk->sk_prot = &tcp_prot;
static int drain_memory_per_cpu_fw_alloc(__u32 i, struct sk_prot *sk_prot_ctx)
struct sk_prot sk_prot_ctx;