Commit 23d06e3b authored by Andrea Bittau's avatar Andrea Bittau Committed by David S. Miller
Browse files

[DCCP] ACKVEC: fix ackvector length calculation



Fix ackvector length calculation upon receiving an "ack-of-ack".  This
patch avoids the ackvector from growing too large which causes it to
not be inserted into packets.

Signed-off-by: default avatarAndrea Bittau <a.bittau@cs.ucl.ac.uk>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@mandriva.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a1e59abf
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -353,11 +353,13 @@ static void dccp_ackvec_throw_record(struct dccp_ackvec *av,
{
	struct dccp_ackvec_record *next;

	av->dccpav_buf_tail = avr->dccpavr_ack_ptr - 1;
	if (av->dccpav_buf_tail == 0)
		av->dccpav_buf_tail = DCCP_MAX_ACKVEC_LEN - 1;

	av->dccpav_vec_len -= avr->dccpavr_sent_len;
	/* sort out vector length */
	if (av->dccpav_buf_head <= avr->dccpavr_ack_ptr)
		av->dccpav_vec_len = avr->dccpavr_ack_ptr - av->dccpav_buf_head;
	else
		av->dccpav_vec_len = DCCP_MAX_ACKVEC_LEN - 1
				     - av->dccpav_buf_head
				     + avr->dccpavr_ack_ptr;

	/* free records */
	list_for_each_entry_safe_from(avr, next, &av->dccpav_records,