@@ -1448,20 +1448,6 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
14481448 msk -> token = subflow_req -> token ;
14491449 msk -> subflow = NULL ;
14501450
1451- if (unlikely (mptcp_token_new_accept (subflow_req -> token , nsk ))) {
1452- nsk -> sk_state = TCP_CLOSE ;
1453- bh_unlock_sock (nsk );
1454-
1455- /* we can't call into mptcp_close() here - possible BH context
1456- * free the sock directly.
1457- * sk_clone_lock() sets nsk refcnt to two, hence call sk_free()
1458- * too.
1459- */
1460- sk_common_release (nsk );
1461- sk_free (nsk );
1462- return NULL ;
1463- }
1464-
14651451 msk -> write_seq = subflow_req -> idsn + 1 ;
14661452 atomic64_set (& msk -> snd_una , msk -> write_seq );
14671453 if (mp_opt -> mp_capable ) {
@@ -1547,7 +1533,7 @@ static void mptcp_destroy(struct sock *sk)
15471533{
15481534 struct mptcp_sock * msk = mptcp_sk (sk );
15491535
1550- mptcp_token_destroy (msk -> token );
1536+ mptcp_token_destroy (msk );
15511537 if (msk -> cached_ext )
15521538 __skb_ext_put (msk -> cached_ext );
15531539
@@ -1636,6 +1622,20 @@ static void mptcp_release_cb(struct sock *sk)
16361622 }
16371623}
16381624
1625+ static int mptcp_hash (struct sock * sk )
1626+ {
1627+ /* should never be called,
1628+ * we hash the TCP subflows not the master socket
1629+ */
1630+ WARN_ON_ONCE (1 );
1631+ return 0 ;
1632+ }
1633+
1634+ static void mptcp_unhash (struct sock * sk )
1635+ {
1636+ /* called from sk_common_release(), but nothing to do here */
1637+ }
1638+
16391639static int mptcp_get_port (struct sock * sk , unsigned short snum )
16401640{
16411641 struct mptcp_sock * msk = mptcp_sk (sk );
@@ -1679,7 +1679,6 @@ void mptcp_finish_connect(struct sock *ssk)
16791679 */
16801680 WRITE_ONCE (msk -> remote_key , subflow -> remote_key );
16811681 WRITE_ONCE (msk -> local_key , subflow -> local_key );
1682- WRITE_ONCE (msk -> token , subflow -> token );
16831682 WRITE_ONCE (msk -> write_seq , subflow -> idsn + 1 );
16841683 WRITE_ONCE (msk -> ack_seq , ack_seq );
16851684 WRITE_ONCE (msk -> can_ack , 1 );
@@ -1761,8 +1760,8 @@ static struct proto mptcp_prot = {
17611760 .sendmsg = mptcp_sendmsg ,
17621761 .recvmsg = mptcp_recvmsg ,
17631762 .release_cb = mptcp_release_cb ,
1764- .hash = inet_hash ,
1765- .unhash = inet_unhash ,
1763+ .hash = mptcp_hash ,
1764+ .unhash = mptcp_unhash ,
17661765 .get_port = mptcp_get_port ,
17671766 .sockets_allocated = & mptcp_sockets_allocated ,
17681767 .memory_allocated = & tcp_memory_allocated ,
@@ -1771,6 +1770,7 @@ static struct proto mptcp_prot = {
17711770 .sysctl_wmem_offset = offsetof(struct net , ipv4 .sysctl_tcp_wmem ),
17721771 .sysctl_mem = sysctl_tcp_mem ,
17731772 .obj_size = sizeof (struct mptcp_sock ),
1773+ .slab_flags = SLAB_TYPESAFE_BY_RCU ,
17741774 .no_autobind = true,
17751775};
17761776
@@ -1800,6 +1800,7 @@ static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr,
18001800 int addr_len , int flags )
18011801{
18021802 struct mptcp_sock * msk = mptcp_sk (sock -> sk );
1803+ struct mptcp_subflow_context * subflow ;
18031804 struct socket * ssock ;
18041805 int err ;
18051806
@@ -1812,19 +1813,23 @@ static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr,
18121813 goto do_connect ;
18131814 }
18141815
1816+ mptcp_token_destroy (msk );
18151817 ssock = __mptcp_socket_create (msk , TCP_SYN_SENT );
18161818 if (IS_ERR (ssock )) {
18171819 err = PTR_ERR (ssock );
18181820 goto unlock ;
18191821 }
18201822
1823+ subflow = mptcp_subflow_ctx (ssock -> sk );
18211824#ifdef CONFIG_TCP_MD5SIG
18221825 /* no MPTCP if MD5SIG is enabled on this socket or we may run out of
18231826 * TCP option space.
18241827 */
18251828 if (rcu_access_pointer (tcp_sk (ssock -> sk )-> md5sig_info ))
1826- mptcp_subflow_ctx ( ssock -> sk ) -> request_mptcp = 0 ;
1829+ subflow -> request_mptcp = 0 ;
18271830#endif
1831+ if (subflow -> request_mptcp && mptcp_token_new_connect (ssock -> sk ))
1832+ subflow -> request_mptcp = 0 ;
18281833
18291834do_connect :
18301835 err = ssock -> ops -> connect (ssock , uaddr , addr_len , flags );
@@ -1888,6 +1893,7 @@ static int mptcp_listen(struct socket *sock, int backlog)
18881893 pr_debug ("msk=%p" , msk );
18891894
18901895 lock_sock (sock -> sk );
1896+ mptcp_token_destroy (msk );
18911897 ssock = __mptcp_socket_create (msk , TCP_LISTEN );
18921898 if (IS_ERR (ssock )) {
18931899 err = PTR_ERR (ssock );
@@ -2077,7 +2083,7 @@ static struct inet_protosw mptcp_protosw = {
20772083 .flags = INET_PROTOSW_ICSK ,
20782084};
20792085
2080- void mptcp_proto_init (void )
2086+ void __init mptcp_proto_init (void )
20812087{
20822088 mptcp_prot .h .hashinfo = tcp_prot .h .hashinfo ;
20832089
@@ -2086,6 +2092,7 @@ void mptcp_proto_init(void)
20862092
20872093 mptcp_subflow_init ();
20882094 mptcp_pm_init ();
2095+ mptcp_token_init ();
20892096
20902097 if (proto_register (& mptcp_prot , 1 ) != 0 )
20912098 panic ("Failed to register MPTCP proto.\n" );
@@ -2139,7 +2146,7 @@ static struct inet_protosw mptcp_v6_protosw = {
21392146 .flags = INET_PROTOSW_ICSK ,
21402147};
21412148
2142- int mptcp_proto_v6_init (void )
2149+ int __init mptcp_proto_v6_init (void )
21432150{
21442151 int err ;
21452152
0 commit comments