diff options
| author | Jiayuan Chen <[email protected]> | 2025-11-11 06:02:50 +0000 |
|---|---|---|
| committer | Martin KaFai Lau <[email protected]> | 2025-11-13 17:15:41 +0000 |
| commit | fbade4bd08ba52cbc74a71c4e86e736f059f99f7 (patch) | |
| tree | f9ff9df5d30a8afa60dd2e0992252f776f6332cd /net/unix/af_unix.c | |
| parent | Merge branch 'x86-fgraph-bpf-fix-orc-stack-unwind-from-return-probe' (diff) | |
| download | kernel-fbade4bd08ba52cbc74a71c4e86e736f059f99f7.tar.gz kernel-fbade4bd08ba52cbc74a71c4e86e736f059f99f7.zip | |
mptcp: Disallow MPTCP subflows from sockmap
The sockmap feature allows bpf syscall from userspace, or based on bpf
sockops, replacing the sk_prot of sockets during protocol stack processing
with sockmap's custom read/write interfaces.
'''
tcp_rcv_state_process()
subflow_syn_recv_sock()
tcp_init_transfer(BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB)
bpf_skops_established <== sockops
bpf_sock_map_update(sk) <== call bpf helper
tcp_bpf_update_proto() <== update sk_prot
'''
Consider two scenarios:
1. When the server has MPTCP enabled and the client also requests MPTCP,
the sk passed to the BPF program is a subflow sk. Since subflows only
handle partial data, replacing their sk_prot is meaningless and will
cause traffic disruption.
2. When the server has MPTCP enabled but the client sends a TCP SYN
without MPTCP, subflow_syn_recv_sock() performs a fallback on the
subflow, replacing the subflow sk's sk_prot with the native sk_prot.
'''
subflow_ulp_fallback()
subflow_drop_ctx()
mptcp_subflow_ops_undo_override()
'''
Subsequently, accept::mptcp_stream_accept::mptcp_fallback_tcp_ops()
converts the subflow to plain TCP.
For the first case, we should prevent it from being combined with sockmap
by setting sk_prot->psock_update_sk_prot to NULL, which will be blocked by
sockmap's own flow.
For the second case, since subflow_syn_recv_sock() has already restored
sk_prot to native tcp_prot/tcpv6_prot, no further action is needed.
Fixes: cec37a6e41aa ("mptcp: Handle MP_CAPABLE options for outgoing connections")
Signed-off-by: Jiayuan Chen <[email protected]>
Signed-off-by: Martin KaFai Lau <[email protected]>
Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
Cc: <[email protected]>
Link: https://patch.msgid.link/[email protected]
Diffstat (limited to 'net/unix/af_unix.c')
0 files changed, 0 insertions, 0 deletions
