Paolo Abeni 4c8941de78 mptcp: avoid flipping mp_capable field in syn_recv_sock()
If multiple CPUs races on the same req_sock in syn_recv_sock(),
flipping such field can cause inconsistent child socket status.

When racing, the CPU losing the req ownership may still change
the mptcp request socket mp_capable flag while the CPU owning
the request is cloning the socket, leaving the child socket with
'is_mptcp' set but no 'mp_capable' flag.

Such socket will stay with 'conn' field cleared, heading to oops
in later mptcp callback.

Address the issue tracking the fallback status in a local variable.

Fixes: 58b09919626b ("mptcp: create msk early")
Co-developed-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-04-20 12:59:32 -07:00
..
2020-04-03 13:12:26 -07:00
2020-03-23 21:57:44 -07:00
2020-01-27 11:09:31 +01:00
2019-09-26 08:56:17 +02:00
2019-12-09 10:36:44 -08:00
2019-11-26 14:40:13 -08:00
2020-04-07 13:51:39 -07:00
2020-04-08 14:34:02 -07:00
2020-01-24 13:44:07 +01:00
2020-03-30 12:18:49 -07:00