mptcp: fix race in msk status update
Currently subflow_finish_connect() changes unconditionally any msk socket status other than TCP_ESTABLISHED. If an unblocking connect() races with close(), we can end-up triggering: IPv4: Attempt to release TCP socket in state 1 00000000e32b8b7e when the msk socket is disposed. Be sure to enter the established status only from SYN_SENT. Fixes: c3c123d16c0e ("net: mptcp: don't hang in mptcp_sendmsg() after TCP fallback") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b2768df24e
commit
1200832c6e
@ -225,7 +225,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
|||||||
|
|
||||||
subflow->icsk_af_ops->sk_rx_dst_set(sk, skb);
|
subflow->icsk_af_ops->sk_rx_dst_set(sk, skb);
|
||||||
|
|
||||||
if (inet_sk_state_load(parent) != TCP_ESTABLISHED) {
|
if (inet_sk_state_load(parent) == TCP_SYN_SENT) {
|
||||||
inet_sk_state_store(parent, TCP_ESTABLISHED);
|
inet_sk_state_store(parent, TCP_ESTABLISHED);
|
||||||
parent->sk_state_change(parent);
|
parent->sk_state_change(parent);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user