diff options
Diffstat (limited to 'net/dccp/ipv4.c')
| -rw-r--r-- | net/dccp/ipv4.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index d4a166f0f391..3f69ea114829 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -392,7 +392,7 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
| 392 | 392 | ||
| 393 | newsk = dccp_create_openreq_child(sk, req, skb); | 393 | newsk = dccp_create_openreq_child(sk, req, skb); |
| 394 | if (newsk == NULL) | 394 | if (newsk == NULL) |
| 395 | goto exit; | 395 | goto exit_nonewsk; |
| 396 | 396 | ||
| 397 | sk_setup_caps(newsk, dst); | 397 | sk_setup_caps(newsk, dst); |
| 398 | 398 | ||
| @@ -409,16 +409,20 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
| 409 | 409 | ||
| 410 | dccp_sync_mss(newsk, dst_mtu(dst)); | 410 | dccp_sync_mss(newsk, dst_mtu(dst)); |
| 411 | 411 | ||
| 412 | if (__inet_inherit_port(sk, newsk) < 0) { | ||
| 413 | sock_put(newsk); | ||
| 414 | goto exit; | ||
| 415 | } | ||
| 412 | __inet_hash_nolisten(newsk, NULL); | 416 | __inet_hash_nolisten(newsk, NULL); |
| 413 | __inet_inherit_port(sk, newsk); | ||
| 414 | 417 | ||
| 415 | return newsk; | 418 | return newsk; |
| 416 | 419 | ||
| 417 | exit_overflow: | 420 | exit_overflow: |
| 418 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); | 421 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); |
| 422 | exit_nonewsk: | ||
| 423 | dst_release(dst); | ||
| 419 | exit: | 424 | exit: |
| 420 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); | 425 | NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); |
| 421 | dst_release(dst); | ||
| 422 | return NULL; | 426 | return NULL; |
| 423 | } | 427 | } |
| 424 | 428 | ||
