summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Eckelmann <sven@narfation.org>2026-06-01 11:00:23 +0200
committerSven Eckelmann <sven@narfation.org>2026-06-03 08:02:20 +0200
commit2b0d08f08ed3b2174f05c43089ec65f3543a025b (patch)
treea748e0a0a03d9d05c5d76df406541c1d1b6d805b
parent33ccd52f3cc9ed46ce395199f89aa3234dc83314 (diff)
downloadlinux-2b0d08f08ed3b2174f05c43089ec65f3543a025b.tar.gz
linux-2b0d08f08ed3b2174f05c43089ec65f3543a025b.zip
batman-adv: tp_meter: fix fast recovery precondition
The fast recovery precondition checks if the recover (initialized to BATADV_TP_FIRST_SEQ) is bigger than the received ack. But since recover is only updated when this check is successful, it will never enter the fast recovery mode. According to RFC6582 Section 3.2 step 2, the check should actually be different: > When the third duplicate ACK is received, the TCP sender first > checks the value of recover to see if the Cumulative > Acknowledgment field covers more than recover The precondition must therefore check if recover is smaller than the received ack - basically swapping the operands of the current check. Cc: stable@kernel.org Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation") Signed-off-by: Sven Eckelmann <sven@narfation.org>
-rw-r--r--net/batman-adv/tp_meter.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c
index 1655f181c929..ae6acbc60c8e 100644
--- a/net/batman-adv/tp_meter.c
+++ b/net/batman-adv/tp_meter.c
@@ -733,7 +733,7 @@ static void batadv_tp_recv_ack(struct batadv_priv *bat_priv,
if (atomic_read(&tp_vars->dup_acks) != 3)
goto out;
- if (recv_ack >= tp_vars->recover)
+ if (tp_vars->recover >= recv_ack)
goto out;
/* if this is the third duplicate ACK do Fast Retransmit */