]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
batman-adv: tp_meter: fix tp_vars reference leak in receiver shutdown
authorSven Eckelmann <sven@narfation.org>
Sun, 10 May 2026 09:31:03 +0000 (11:31 +0200)
committerSven Eckelmann <sven@narfation.org>
Mon, 11 May 2026 17:54:49 +0000 (19:54 +0200)
commit77098e4bea37af51d3962efa88a5af2ea5e1ac57
treee16fa3339cc2e722932e30b38ec63c295aa8029b
parent94f3b133168d1c49895e7cc6afbcf1cc0b354602
batman-adv: tp_meter: fix tp_vars reference leak in receiver shutdown

The receiver shutdown timer handler, batadv_tp_receiver_shutdown(), is
responsible for releasing the tp_vars reference it holds. However, the
existing logic for coordinating this release with batadv_tp_stop_all() was
flawed.

timer_shutdown_sync() guarantees the timer will not fire again after it
returns, but it returns non-zero only when the timer was pending at the
time of the call. If the timer had already expired (and
batadv_tp_stop_all() would unsucessfully try to  rearm itself),
batadv_tp_stop_all() skips its batadv_tp_vars_put(), and
batadv_tp_receiver_shutdown() fails to put its own reference as well.

Fix this by introducing a new atomic variable receiving that is set to 1
when the receiver is initialized and cleared atomically with atomic_xchg()
by whichever side claims it first. Only the side that observes the
transition from 1 to 0 is responsible for releasing the tp_vars timer
reference, eliminating the uncertainty.

Cc: stable@kernel.org
Fixes: 3d3cf6a7314a ("batman-adv: stop tp_meter sessions during mesh teardown")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
net/batman-adv/tp_meter.c
net/batman-adv/types.h