diff options
Diffstat (limited to 'net/tipc/server.c')
| -rw-r--r-- | net/tipc/server.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| diff --git a/net/tipc/server.c b/net/tipc/server.c index ab6183cdb121..922e04a43396 100644 --- a/net/tipc/server.c +++ b/net/tipc/server.c | |||
| @@ -102,7 +102,7 @@ static void tipc_conn_kref_release(struct kref *kref) | |||
| 102 | } | 102 | } | 
| 103 | saddr->scope = -TIPC_NODE_SCOPE; | 103 | saddr->scope = -TIPC_NODE_SCOPE; | 
| 104 | kernel_bind(sock, (struct sockaddr *)saddr, sizeof(*saddr)); | 104 | kernel_bind(sock, (struct sockaddr *)saddr, sizeof(*saddr)); | 
| 105 | sk_release_kernel(sk); | 105 | sock_release(sock); | 
| 106 | con->sock = NULL; | 106 | con->sock = NULL; | 
| 107 | } | 107 | } | 
| 108 | 108 | ||
| @@ -309,6 +309,10 @@ static int tipc_accept_from_sock(struct tipc_conn *con) | |||
| 309 | 309 | ||
| 310 | /* Notify that new connection is incoming */ | 310 | /* Notify that new connection is incoming */ | 
| 311 | newcon->usr_data = s->tipc_conn_new(newcon->conid); | 311 | newcon->usr_data = s->tipc_conn_new(newcon->conid); | 
| 312 | if (!newcon->usr_data) { | ||
| 313 | sock_release(newsock); | ||
| 314 | return -ENOMEM; | ||
| 315 | } | ||
| 312 | 316 | ||
| 313 | /* Wake up receive process in case of 'SYN+' message */ | 317 | /* Wake up receive process in case of 'SYN+' message */ | 
| 314 | newsock->sk->sk_data_ready(newsock->sk); | 318 | newsock->sk->sk_data_ready(newsock->sk); | 
| @@ -321,12 +325,9 @@ static struct socket *tipc_create_listen_sock(struct tipc_conn *con) | |||
| 321 | struct socket *sock = NULL; | 325 | struct socket *sock = NULL; | 
| 322 | int ret; | 326 | int ret; | 
| 323 | 327 | ||
| 324 | ret = sock_create_kern(AF_TIPC, SOCK_SEQPACKET, 0, &sock); | 328 | ret = sock_create_kern(s->net, AF_TIPC, SOCK_SEQPACKET, 0, &sock); | 
| 325 | if (ret < 0) | 329 | if (ret < 0) | 
| 326 | return NULL; | 330 | return NULL; | 
| 327 | |||
| 328 | sk_change_net(sock->sk, s->net); | ||
| 329 | |||
| 330 | ret = kernel_setsockopt(sock, SOL_TIPC, TIPC_IMPORTANCE, | 331 | ret = kernel_setsockopt(sock, SOL_TIPC, TIPC_IMPORTANCE, | 
| 331 | (char *)&s->imp, sizeof(s->imp)); | 332 | (char *)&s->imp, sizeof(s->imp)); | 
| 332 | if (ret < 0) | 333 | if (ret < 0) | 
| @@ -376,7 +377,7 @@ static struct socket *tipc_create_listen_sock(struct tipc_conn *con) | |||
| 376 | 377 | ||
| 377 | create_err: | 378 | create_err: | 
| 378 | kernel_sock_shutdown(sock, SHUT_RDWR); | 379 | kernel_sock_shutdown(sock, SHUT_RDWR); | 
| 379 | sk_release_kernel(sock->sk); | 380 | sock_release(sock); | 
| 380 | return NULL; | 381 | return NULL; | 
| 381 | } | 382 | } | 
| 382 | 383 | ||
