diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2020-01-30 07:42:00 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-01-30 07:42:00 -0800 |
commit | 1c715a659a16e193a23051ddff4becdad8e18ba1 (patch) | |
tree | f93d5ec0e6164a489e4ca19211641dcab3fc4b38 /net/mptcp/subflow.c | |
parent | 5e237e8c77279a0873a5e9806a5459ebc840c9ce (diff) | |
parent | 9fbf082f569980ddd7cab348e0a118678db0e47e (diff) | |
download | linux-1c715a659a16e193a23051ddff4becdad8e18ba1.tar.bz2 |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from David Miller:
1) Various mptcp fixupes from Florian Westphal and Geery Uytterhoeven.
2) Don't clear the node/port GUIDs after we've assigned the correct
values to them. From Leon Romanovsky.
* git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net:
net/core: Do not clear VF index for node/port GUIDs query
mptcp: Fix undefined mptcp_handle_ipv6_mapped for modular IPV6
net: drop_monitor: Use kstrdup
udp: document udp_rcv_segment special case for looped packets
mptcp: MPTCP_HMAC_TEST should depend on MPTCP
mptcp: Fix incorrect IPV6 dependency check
Revert "MAINTAINERS: mptcp@ mailing list is moderated"
mptcp: handle tcp fallback when using syn cookies
mptcp: avoid a lockdep splat when mcast group was joined
mptcp: fix panic on user pointer access
mptcp: defer freeing of cached ext until last moment
net: mvneta: fix XDP support if sw bm is used as fallback
sch_choke: Use kvcalloc
mptcp: Fix build with PROC_FS disabled.
MAINTAINERS: mptcp@ mailing list is moderated
Diffstat (limited to 'net/mptcp/subflow.c')
-rw-r--r-- | net/mptcp/subflow.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 1662e1178949..65122edf60aa 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -186,6 +186,9 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk, pr_debug("listener=%p, req=%p, conn=%p", listener, req, listener->conn); + if (tcp_rsk(req)->is_mptcp == 0) + goto create_child; + /* if the sk is MP_CAPABLE, we try to fetch the client key */ subflow_req = mptcp_subflow_rsk(req); if (subflow_req->mp_capable) { @@ -582,9 +585,9 @@ subflow_default_af_ops(struct sock *sk) return &subflow_specific; } -void mptcp_handle_ipv6_mapped(struct sock *sk, bool mapped) -{ #if IS_ENABLED(CONFIG_MPTCP_IPV6) +void mptcpv6_handle_mapped(struct sock *sk, bool mapped) +{ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); struct inet_connection_sock *icsk = inet_csk(sk); struct inet_connection_sock_af_ops *target; @@ -599,8 +602,8 @@ void mptcp_handle_ipv6_mapped(struct sock *sk, bool mapped) subflow->icsk_af_ops = icsk->icsk_af_ops; icsk->icsk_af_ops = target; -#endif } +#endif int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock) { @@ -621,7 +624,9 @@ int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock) */ sf->sk->sk_net_refcnt = 1; get_net(net); +#ifdef CONFIG_PROC_FS this_cpu_add(*net->core.sock_inuse, 1); +#endif err = tcp_set_ulp(sf->sk, "mptcp"); release_sock(sf->sk); @@ -767,7 +772,7 @@ static void subflow_ulp_clone(const struct request_sock *req, struct mptcp_subflow_context *old_ctx = mptcp_subflow_ctx(newsk); struct mptcp_subflow_context *new_ctx; - if (!subflow_req->mp_capable) { + if (!tcp_rsk(req)->is_mptcp || !subflow_req->mp_capable) { subflow_ulp_fallback(newsk, old_ctx); return; } |