• Gerrit Renker's avatar
    dccp: Bug-Fix - AWL was never updated · 73f18fdb
    Gerrit Renker authored
    The AWL lower Ack validity window advances in proportion to GSS, the greatest
    sequence number sent. Updating AWL other than at connection setup (in the
    DCCP-Request sent by dccp_v{4,6}_connect()) was missing in the DCCP code.
    
    This bug lead to syslog messages such as
    
     "kernel: dccp_check_seqno: DCCP: Step 6 failed for DATAACK packet, [...] 
      P.ackno exists or LAWL(82947089) <= P.ackno(82948208)
                                       <= S.AWH(82948728), sending SYNC..."
    
    The difference between AWL/AWH here is 1639 packets, while the expected value
    (the Sequence Window) would have been 100 (the default).  A closer look showed
    that LAWL = AWL = 82947089 equalled the ISS on the Response.
    
    The patch now updates AWL with each increase of GSS.
    
    
    Further changes:
    ----------------
    The patch also enforces more stringent checks on the ISS sequence number:
    
     * AWL is initialised to ISS at connection setup and remains at this value;
     * AWH is then always set to GSS (via dccp_update_gss());
     * so on the first Request: AWL =      AWH = ISS,
       and on the n-th Request: AWL = ISS, AWH = ISS + n.
    
    As a consequence, only Response packets that refer to Requests sent by this
    host will pass, all others are discarded. This is the intention and in effect 
    implements the initial adjustments for AWL as specified in RFC 4340, 7.5.1.
    
    Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>   
    Acked-by: default avatarIan McDonald <ian.mcdonald@jandi.co.nz>
    73f18fdb
output.c 17.2 KB