From: Greg Kroah-Hartman <gre...@linuxfoundation.org> From: Florian Westphal <f...@strlen.de>
[ Upstream commit e0be4931f3fee2e04dec4013ea4f27ec2db8556f ] Send logic caches last active subflow in the msk, so it needs to be cleared when the cached subflow is closed. Fixes: d5f49190def61c ("mptcp: allow picking different xmit subflows") Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/155 Reported-by: Christoph Paasch <cpaa...@apple.com> Acked-by: Paolo Abeni <pab...@redhat.com> Reviewed-by: Matthieu Baerts <matthieu.bae...@tessares.net> Signed-off-by: Florian Westphal <f...@strlen.de> Signed-off-by: Mat Martineau <mathew.j.martin...@linux.intel.com> Signed-off-by: David S. Miller <da...@davemloft.net> Signed-off-by: Sasha Levin <sas...@kernel.org> --- net/mptcp/protocol.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 3cc7be259396..de89824a2a36 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2110,6 +2110,8 @@ static struct sock *mptcp_subflow_get_retrans(const struct mptcp_sock *msk) void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, struct mptcp_subflow_context *subflow) { + struct mptcp_sock *msk = mptcp_sk(sk); + list_del(&subflow->node); lock_sock_nested(ssk, SINGLE_DEPTH_NESTING); @@ -2138,6 +2140,9 @@ void __mptcp_close_ssk(struct sock *sk, struct sock *ssk, release_sock(ssk); sock_put(ssk); + + if (ssk == msk->last_snd) + msk->last_snd = NULL; } static unsigned int mptcp_sync_mss(struct sock *sk, u32 pmtu) -- 2.30.1