|
@@ -121,9 +121,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dsz);
|
|
|
static const struct proto_ops packet_ops;
|
|
|
static const struct proto_ops stream_ops;
|
|
|
static const struct proto_ops msg_ops;
|
|
|
-
|
|
|
static struct proto tipc_proto;
|
|
|
-static struct proto tipc_proto_kern;
|
|
|
|
|
|
static const struct nla_policy tipc_nl_sock_policy[TIPC_NLA_SOCK_MAX + 1] = {
|
|
|
[TIPC_NLA_SOCK_UNSPEC] = { .type = NLA_UNSPEC },
|
|
@@ -341,11 +339,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
|
|
|
}
|
|
|
|
|
|
/* Allocate socket's protocol area */
|
|
|
- if (!kern)
|
|
|
- sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto);
|
|
|
- else
|
|
|
- sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto_kern);
|
|
|
-
|
|
|
+ sk = sk_alloc(net, AF_TIPC, GFP_KERNEL, &tipc_proto);
|
|
|
if (sk == NULL)
|
|
|
return -ENOMEM;
|
|
|
|
|
@@ -383,75 +377,6 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * tipc_sock_create_local - create TIPC socket from inside TIPC module
|
|
|
- * @type: socket type - SOCK_RDM or SOCK_SEQPACKET
|
|
|
- *
|
|
|
- * We cannot use sock_creat_kern here because it bumps module user count.
|
|
|
- * Since socket owner and creator is the same module we must make sure
|
|
|
- * that module count remains zero for module local sockets, otherwise
|
|
|
- * we cannot do rmmod.
|
|
|
- *
|
|
|
- * Returns 0 on success, errno otherwise
|
|
|
- */
|
|
|
-int tipc_sock_create_local(struct net *net, int type, struct socket **res)
|
|
|
-{
|
|
|
- int rc;
|
|
|
-
|
|
|
- rc = sock_create_lite(AF_TIPC, type, 0, res);
|
|
|
- if (rc < 0) {
|
|
|
- pr_err("Failed to create kernel socket\n");
|
|
|
- return rc;
|
|
|
- }
|
|
|
- tipc_sk_create(net, *res, 0, 1);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * tipc_sock_release_local - release socket created by tipc_sock_create_local
|
|
|
- * @sock: the socket to be released.
|
|
|
- *
|
|
|
- * Module reference count is not incremented when such sockets are created,
|
|
|
- * so we must keep it from being decremented when they are released.
|
|
|
- */
|
|
|
-void tipc_sock_release_local(struct socket *sock)
|
|
|
-{
|
|
|
- tipc_release(sock);
|
|
|
- sock->ops = NULL;
|
|
|
- sock_release(sock);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * tipc_sock_accept_local - accept a connection on a socket created
|
|
|
- * with tipc_sock_create_local. Use this function to avoid that
|
|
|
- * module reference count is inadvertently incremented.
|
|
|
- *
|
|
|
- * @sock: the accepting socket
|
|
|
- * @newsock: reference to the new socket to be created
|
|
|
- * @flags: socket flags
|
|
|
- */
|
|
|
-
|
|
|
-int tipc_sock_accept_local(struct socket *sock, struct socket **newsock,
|
|
|
- int flags)
|
|
|
-{
|
|
|
- struct sock *sk = sock->sk;
|
|
|
- int ret;
|
|
|
-
|
|
|
- ret = sock_create_lite(sk->sk_family, sk->sk_type,
|
|
|
- sk->sk_protocol, newsock);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
- ret = tipc_accept(sock, *newsock, flags);
|
|
|
- if (ret < 0) {
|
|
|
- sock_release(*newsock);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- (*newsock)->ops = sock->ops;
|
|
|
- return ret;
|
|
|
-}
|
|
|
-
|
|
|
static void tipc_sk_callback(struct rcu_head *head)
|
|
|
{
|
|
|
struct tipc_sock *tsk = container_of(head, struct tipc_sock, rcu);
|
|
@@ -2608,12 +2533,6 @@ static struct proto tipc_proto = {
|
|
|
.sysctl_rmem = sysctl_tipc_rmem
|
|
|
};
|
|
|
|
|
|
-static struct proto tipc_proto_kern = {
|
|
|
- .name = "TIPC",
|
|
|
- .obj_size = sizeof(struct tipc_sock),
|
|
|
- .sysctl_rmem = sysctl_tipc_rmem
|
|
|
-};
|
|
|
-
|
|
|
/**
|
|
|
* tipc_socket_init - initialize TIPC socket interface
|
|
|
*
|