• Matthieu Baerts (NGI0)'s avatar
    mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set · 85df533a
    Matthieu Baerts (NGI0) authored
    Up to the 'Fixes' commit, having an endpoint with both the 'signal' and
    'subflow' flags, resulted in the creation of a subflow and an address
    announcement using the address linked to this endpoint. After this
    commit, only the address announcement was done, ignoring the 'subflow'
    flag.
    
    That's because the same bitmap is used for the two flags. It is OK to
    keep this single bitmap, the already selected local endpoint simply have
    to be re-used, but not via select_local_address() not to look at the
    just modified bitmap.
    
    Note that it is unusual to set the two flags together: creating a new
    subflow using a new local address will implicitly advertise it to the
    other peer. So in theory, no need to advertise it explicitly as well.
    Maybe there are use-cases -- the subflow might not reach the other peer
    that way, we can ask the other peer to try initiating the new subflow
    without delay -- or very likely the user is confused, and put both flags
    "just to be sure at least the right one is set". Still, if it is
    allowed, the kernel should do what has been asked: using this endpoint
    to announce the address and to create a new subflow from it.
    
    An alternative is to forbid the use of the two flags together, but
    that's probably too late, there are maybe use-cases, and it was working
    before. This patch will avoid people complaining subflows are not
    created using the endpoint they added with the 'subflow' and 'signal'
    flag.
    
    Note that with the current patch, the subflow might not be created in
    some corner cases, e.g. if the 'subflows' limit was reached when sending
    the ADD_ADDR, but changed later on. It is probably not worth splitting
    id_avail_bitmap per target ('signal', 'subflow'), which will add another
    large field to the msk "just" to track (again) endpoints. Anyway,
    currently when the limits are changed, the kernel doesn't check if new
    subflows can be created or removed, because we would need to keep track
    of the received ADD_ADDR, and more. It sounds OK to assume that the
    limits should be properly configured before establishing new
    connections.
    
    Fixes: 86e39e04 ("mptcp: keep track of local endpoint still available for each msk")
    Cc: stable@vger.kernel.org
    Suggested-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
    Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-5-c8a9b036493b@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    85df533a
pm_netlink.c 59.9 KB