@ -1421,15 +1421,11 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
if ( sk_acceptq_is_full ( sk ) )
goto exit_overflow ;
if ( ! dst & & ( dst = inet_csk_route_req ( sk , req ) ) = = NULL )
goto exit ;
newsk = tcp_create_openreq_child ( sk , req , skb ) ;
if ( ! newsk )
goto exit_nonewsk ;
newsk - > sk_gso_type = SKB_GSO_TCPV4 ;
sk_setup_caps ( newsk , dst ) ;
newtp = tcp_sk ( newsk ) ;
newinet = inet_sk ( newsk ) ;
@ -1447,6 +1443,11 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
inet_csk ( newsk ) - > icsk_ext_hdr_len = inet_opt - > opt . optlen ;
newinet - > inet_id = newtp - > write_seq ^ jiffies ;
if ( ! dst & & ( dst = inet_csk_route_child_sock ( sk , newsk , req ) ) = = NULL )
goto put_and_exit ;
sk_setup_caps ( newsk , dst ) ;
tcp_mtup_init ( newsk ) ;
tcp_sync_mss ( newsk , dst_mtu ( dst ) ) ;
newtp - > advmss = dst_metric_advmss ( dst ) ;
@ -1474,10 +1475,8 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
}
# endif
if ( __inet_inherit_port ( sk , newsk ) < 0 ) {
sock_put ( newsk ) ;
goto exit ;
}
if ( __inet_inherit_port ( sk , newsk ) < 0 )
goto put_and_exit ;
__inet_hash_nolisten ( newsk , NULL ) ;
return newsk ;
@ -1489,6 +1488,9 @@ exit_nonewsk:
exit :
NET_INC_STATS_BH ( sock_net ( sk ) , LINUX_MIB_LISTENDROPS ) ;
return NULL ;
put_and_exit :
sock_put ( newsk ) ;
goto exit ;
}
EXPORT_SYMBOL ( tcp_v4_syn_recv_sock ) ;