Skip to content
  • Davide Caratti's avatar
    mptcp: validate 'id' when stopping the ADD_ADDR retransmit timer · d58300c3
    Davide Caratti authored
    when Linux receives an echo-ed ADD_ADDR, it checks the IP address against
    the list of "announced" addresses. In case of a positive match, the timer
    that handles retransmissions is stopped regardless of the 'Address Id' in
    the received packet: this behaviour does not comply with RFC8684 3.4.1.
    
    Fix it by validating the 'Address Id' in received echo-ed ADD_ADDRs.
    Tested using packetdrill, with the following captured output:
    
     unpatched kernel:
    
     Out <...> Flags [.], ack 1, win 256, options [mptcp add-addr v1 id 1 198.51.100.2 hmac 0xfd2e62517888fe29,mptcp dss ack 3007449509], length 0
     In  <...> Flags [.], ack 1, win 257, options [mptcp add-addr v1-echo id 1 1.2.3.4,mptcp dss ack 3013740213], length 0
     Out <...> Flags [.], ack 1, win 256, options [mptcp add-addr v1 id 1 198.51.100.2 hmac 0xfd2e62517888fe29,mptcp dss ack 3007449509], length 0
     In  <...> Flags [.], ack 1, win 257, options [mptcp add-addr v1-echo id 90 198.51.100.2,mptcp dss ack 3013740213], length 0
            ^^^ retransmission is stopped here, but 'Address Id' is 90
    
     patched kernel:
    
     Out <...> Flags [.], ack 1, win 256, options [mptcp add-addr v1 id 1 198.51.100.2 hmac 0x1cf372d59e05f4b8,mptcp dss ack 3007449509], length 0
     In  <...> Flags [.], ack 1, win 257, options [mptcp add-addr v1-echo id 1 1.2.3.4,mptcp dss ack 1672384568], length 0
     Out <...> Flags [.], ack 1, win 256, options [mptcp add-addr v1 id 1 198.51.100.2 hmac 0x1cf372d59e05f4b8,mptcp dss ack 3007449509], length 0
     In  <...> Flags [.], ack 1, win 257, options [mptcp add-addr v1-echo id 90 198.51.100.2,mptcp dss ack 1672384568], length 0
     Out <...> Flags [.], ack 1, win 256, options [mptcp add-addr v1 id 1 198.51.100.2 hmac 0x1cf372d59e05f4b8,mptcp dss ack 3007449509], length 0
     In  <...> Flags [.], ack 1, win 257, options [mptcp add-addr v1-echo id 1 198.51.100.2,mptcp dss ack 1672384568], length 0
            ^^^ retransmission is stopped here, only when both 'Address Id' and 'IP Address' match
    
    Fixes: 00cfd77b
    
     ("mptcp: retransmit ADD_ADDR when timeout")
    Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
    Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d58300c3