• Mat Martineau's avatar
    mptcp: Check for orphaned subflow before handling MP_FAIL timer · d42f9e4e
    Mat Martineau authored
    MP_FAIL timeout (waiting for a peer to respond to an MP_FAIL with
    another MP_FAIL) is implemented using the MPTCP socket's sk_timer. That
    timer is also used at MPTCP socket close, so it's important to not have
    the two timer users interfere with each other.
    
    At MPTCP socket close, all subflows are orphaned before sk_timer is
    manipulated. By checking the SOCK_DEAD flag on the subflows, each
    subflow can determine if the timer is safe to alter without acquiring
    any MPTCP-level lock. This replaces code that was using the
    mptcp_data_lock and MPTCP-level socket state checks that did not
    correctly protect the timer.
    
    Fixes: 49fa1919 ("mptcp: reset subflow when MP_FAIL doesn't respond")
    Reviewed-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    d42f9e4e
subflow.c 51.8 KB