• Paolo Abeni's avatar
    mptcp: consolidate fallback and non fallback state machine · 81c1d029
    Paolo Abeni authored
    An orphaned msk releases the used resources via the worker,
    when the latter first see the msk in CLOSED status.
    
    If the msk status transitions to TCP_CLOSE in the release callback
    invoked by the worker's final release_sock(), such instance of the
    workqueue will not take any action.
    
    Additionally the MPTCP code prevents scheduling the worker once the
    socket reaches the CLOSE status: such msk resources will be leaked.
    
    The only code path that can trigger the above scenario is the
    __mptcp_check_send_data_fin() in fallback mode.
    
    Address the issue removing the special handling of fallback socket
    in __mptcp_check_send_data_fin(), consolidating the state machine
    for fallback and non fallback socket.
    
    Since non-fallback sockets do not send and do not receive data_fin,
    the mptcp code can update the msk internal status to match the next
    step in the SM every time data fin (ack) should be generated or
    received.
    
    As a consequence we can remove a bunch of checks for fallback from
    the fastpath.
    
    Fixes: 6e628cd3 ("mptcp: use mptcp release_cb for delayed tasks")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
    Signed-off-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    81c1d029
subflow.c 57 KB