From: Sven Eckelmann <sven@narfation.org>
To: stable@vger.kernel.org
Cc: Sven Eckelmann <sven@narfation.org>
Subject: [PATCH 5.15 04/25] batman-adv: tp_meter: avoid window underflow
Date: Fri, 26 Jun 2026 18:10:43 +0200 [thread overview]
Message-ID: <20260626161105.124113-5-sven@narfation.org> (raw)
In-Reply-To: <20260626161105.124113-1-sven@narfation.org>
commit 765947b81fb54b6ebb0bc1cfe55c0fa399e002b8 upstream.
In batadv_tp_avail(), win_left is calculated with 32-bit unsigned
arithmetic: win_left = win_limit - tp_vars->last_sent;
During Fast Recovery, cwnd is inflated and last_sent advances rapidly. When
Fast Recovery ends, cwnd drops abruptly back to ss_threshold. If the newly
shrunk win_limit is less than last_sent, the unsigned subtraction will
underflow, wrapping to a massive positive value. Instead of returning that
the window is full (unavailable), it returns that the sender can continue
sending.
To handle this situation, it must be checked whether the windows end
sequence number (win_limit) has to be compared with the last sent sequence
number. If it would be before the last sent sequence number, then more acks
are needed before the transmission can be started again.
Cc: stable@kernel.org
Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
net/batman-adv/tp_meter.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c
index f7b0ce3f8e2ae..3fd46999f3674 100644
--- a/net/batman-adv/tp_meter.c
+++ b/net/batman-adv/tp_meter.c
@@ -817,10 +817,15 @@ static void batadv_tp_recv_ack(struct batadv_priv *bat_priv,
static bool batadv_tp_avail(struct batadv_tp_vars *tp_vars,
size_t payload_len)
{
+ u32 last_sent = READ_ONCE(tp_vars->last_sent);
u32 win_left, win_limit;
win_limit = atomic_read(&tp_vars->last_acked) + tp_vars->cwnd;
- win_left = win_limit - tp_vars->last_sent;
+
+ if (batadv_seq_before(last_sent, win_limit))
+ win_left = win_limit - last_sent;
+ else
+ win_left = 0;
return win_left >= payload_len;
}
--
2.47.3
next prev parent reply other threads:[~2026-06-26 16:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 16:10 [PATCH 5.15 00/25] batman-adv: 7.2 merge window fixes backports Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 01/25] batman-adv: tp_meter: keep unacked list in ascending ordered Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 02/25] batman-adv: tp_meter: initialize dup_acks explicitly Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 03/25] batman-adv: tp_meter: initialize dec_cwnd explicitly Sven Eckelmann
2026-06-26 16:10 ` Sven Eckelmann [this message]
2026-06-26 16:10 ` [PATCH 5.15 05/25] batman-adv: tp_meter: avoid divide-by-zero for dec_cwnd Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 06/25] batman-adv: tp_meter: fix fast recovery precondition Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 07/25] batman-adv: tp_meter: handle seqno wrap-around for fast recovery detection Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 08/25] batman-adv: tp_meter: add only finished tp_vars to lists Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 09/25] batman-adv: bla: annotate lasttime access with READ/WRITE_ONCE Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 10/25] batman-adv: prevent ELP transmission interval underflow Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 11/25] batman-adv: tp_meter: initialize last_recv_time during init Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 12/25] batman-adv: ensure bcast is writable before modifying TTL Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 13/25] batman-adv: fix (m|b)cast csum after decrementing TTL Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 14/25] batman-adv: frag: ensure fragment is writable before modifying TTL Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 15/25] batman-adv: frag: avoid underflow of TTL Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 16/25] batman-adv: v: prevent OGM aggregation on disabled hardif Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 17/25] batman-adv: tp_meter: restrict number of unacked list entries Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 18/25] batman-adv: tp_meter: annotate last_recv_time access with READ/WRITE_ONCE Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 19/25] batman-adv: tp_meter: prevent parallel modifications of last_recv Sven Eckelmann
2026-06-26 16:10 ` [PATCH 5.15 20/25] batman-adv: tp_meter: handle overlapping packets Sven Eckelmann
2026-06-26 16:11 ` [PATCH 5.15 21/25] batman-adv: tt: don't merge change entries with different VIDs Sven Eckelmann
2026-06-26 16:11 ` [PATCH 5.15 22/25] batman-adv: tt: track roam count per VID Sven Eckelmann
2026-06-26 16:11 ` [PATCH 5.15 23/25] batman-adv: dat: prevent false sharing between VLANs Sven Eckelmann
2026-06-26 16:11 ` [PATCH 5.15 24/25] batman-adv: tvlv: enforce 2-byte alignment Sven Eckelmann
2026-06-26 16:11 ` [PATCH 5.15 25/25] batman-adv: tvlv: avoid race of cifsnotfound handler state Sven Eckelmann
2026-06-28 3:33 ` [PATCH 5.15 00/25] batman-adv: 7.2 merge window fixes backports Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260626161105.124113-5-sven@narfation.org \
--to=sven@narfation.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox