[PATCH v3 mptcp-net 0/5] mptcp: fix fallback-related races

Paolo Abeni posted 5 patches 2 months, 1 week ago
Failed in applying to current master (apply log)
There is a newer version of this series
net/mptcp/ctrl.c     |  4 +-
net/mptcp/mib.c      |  5 +++
net/mptcp/mib.h      |  7 ++++
net/mptcp/options.c  |  6 ++-
net/mptcp/pm.c       |  8 +++-
net/mptcp/protocol.c | 97 ++++++++++++++++++++++++++++++++++----------
net/mptcp/protocol.h | 35 ++++++++--------
net/mptcp/subflow.c  | 40 ++++++++++--------
8 files changed, 140 insertions(+), 62 deletions(-)
[PATCH v3 mptcp-net 0/5] mptcp: fix fallback-related races
Posted by Paolo Abeni 2 months, 1 week ago
This series contains 3 fixes somewhat related to various races we have
while handling fallback and 2 small follow-up likely more suited for
net-next.

The root cause of the issues addressed here is that the check for
"we can fallback to tcp now" and the related action are not atomic. That
also applies to fallback due to MP_FAIL - where the window race is even
wider.

Address the issue introducing an additional spinlock to bundle together
all the relevant events, as per patch 1 and 2.

Note that mptcp_disconnect() unconditionally
clears the fallback status (zeroing msk->flags) but don't tuch the
`allows_infinite_fallback` flag. Such issue is addressed in patch 3.

Patch 4 cleans up a bit the fallback code, introducing specific MIB for
each FB reason, and patch 5 drops the, hopefully now redundant
pr_fallback().
---
v2 -> v3:
 - mptcp_do_fallback  -> mptcp_try_fallback
 - refactored patch 3/5
 - changed mibs names, increment fail only when the protocol mandate it
 - fix W=1 warn in patch 5/5

Paolo Abeni (5):
  mptcp: make fallback action and fallback decision atomic
  mptcp: plug races between subflow fail and subflow creation
  mptcp: reset fallback status gracefully at disconnect() time
  mptcp: track fallbacks accurately via mibs
  mptcp: remove pr_fallback()

 net/mptcp/ctrl.c     |  4 +-
 net/mptcp/mib.c      |  5 +++
 net/mptcp/mib.h      |  7 ++++
 net/mptcp/options.c  |  6 ++-
 net/mptcp/pm.c       |  8 +++-
 net/mptcp/protocol.c | 97 ++++++++++++++++++++++++++++++++++----------
 net/mptcp/protocol.h | 35 ++++++++--------
 net/mptcp/subflow.c  | 40 ++++++++++--------
 8 files changed, 140 insertions(+), 62 deletions(-)

-- 
2.50.0
Re: [PATCH v3 mptcp-net 0/5] mptcp: fix fallback-related races
Posted by MPTCP CI 2 months, 1 week ago
Hi Paolo,

Thank you for your modifications, that's great!

Our CI did some validations and here is its report:

- KVM Validation: normal: Success! ✅
- KVM Validation: debug: Success! ✅
- KVM Validation: btf-normal (only bpftest_all): Success! ✅
- KVM Validation: btf-debug (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/16175222973

Initiator: Matthieu Baerts (NGI0)
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/2b0c77e07efb
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=980585


If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:

    $ cd [kernel source code]
    $ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
        --pull always mptcp/mptcp-upstream-virtme-docker:latest \
        auto-normal

For more details:

    https://github.com/multipath-tcp/mptcp-upstream-virtme-docker


Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)

Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
Re: [PATCH v3 mptcp-net 0/5] mptcp: fix fallback-related races
Posted by Matthieu Baerts 2 months, 1 week ago
Hi Paolo,

On 09/07/2025 17:12, Paolo Abeni wrote:
> This series contains 3 fixes somewhat related to various races we have
> while handling fallback and 2 small follow-up likely more suited for
> net-next.
> 
> The root cause of the issues addressed here is that the check for
> "we can fallback to tcp now" and the related action are not atomic. That
> also applies to fallback due to MP_FAIL - where the window race is even
> wider.
> 
> Address the issue introducing an additional spinlock to bundle together
> all the relevant events, as per patch 1 and 2.
> 
> Note that mptcp_disconnect() unconditionally
> clears the fallback status (zeroing msk->flags) but don't tuch the
> `allows_infinite_fallback` flag. Such issue is addressed in patch 3.
> 
> Patch 4 cleans up a bit the fallback code, introducing specific MIB for
> each FB reason, and patch 5 drops the, hopefully now redundant
> pr_fallback().
> ---
> v2 -> v3:
>  - mptcp_do_fallback  -> mptcp_try_fallback
>  - refactored patch 3/5
>  - changed mibs names, increment fail only when the protocol mandate it
>  - fix W=1 warn in patch 5/5

Thank you for the new version!

It looks good to me, I just a few small questions, not really blocking
the series, and I can eventually do the small modifications when
applying the patches if you prefer.

> 
> Paolo Abeni (5):
>   mptcp: make fallback action and fallback decision atomic
>   mptcp: plug races between subflow fail and subflow creation
>   mptcp: reset fallback status gracefully at disconnect() time
>   mptcp: track fallbacks accurately via mibs
>   mptcp: remove pr_fallback()
> 
>  net/mptcp/ctrl.c     |  4 +-
>  net/mptcp/mib.c      |  5 +++
>  net/mptcp/mib.h      |  7 ++++
>  net/mptcp/options.c  |  6 ++-
>  net/mptcp/pm.c       |  8 +++-
>  net/mptcp/protocol.c | 97 ++++++++++++++++++++++++++++++++++----------
>  net/mptcp/protocol.h | 35 ++++++++--------
>  net/mptcp/subflow.c  | 40 ++++++++++--------
>  8 files changed, 140 insertions(+), 62 deletions(-)
> 

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.