]> Pileus Git - ~andy/linux/commit
dccp: Bug-Fix - AWL was never updated
authorGerrit Renker <gerrit@erg.abdn.ac.uk>
Sat, 26 Jul 2008 10:59:10 +0000 (11:59 +0100)
committerGerrit Renker <gerrit@erg.abdn.ac.uk>
Sat, 26 Jul 2008 10:59:10 +0000 (11:59 +0100)
commit73f18fdbca3f92b90aeaee16f5175fe30496e218
tree855e3a9dcad54336c3b0301e09f85b39a9c2b48a
parent59435444a13ed52d3444c5df26b73d3086bcd57b
dccp: Bug-Fix - AWL was never updated

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: Ian McDonald <ian.mcdonald@jandi.co.nz>
net/dccp/output.c