mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
TP meter sessions remain linked on bat_priv->tp_list after the netlink
request has already finished. When the mesh interface is removed,
batadv_mesh_free() currently tears down the mesh without first draining
these sessions.
A running sender thread or a late incoming tp_meter packet can then keep
processing against a mesh instance which is already shutting down.
Synchronize tp_meter with the mesh lifetime by stopping all active
sessions from batadv_mesh_free() and waiting for sender threads to exit
before teardown continues.
Fixes: 33a3bb4a33 ("batman-adv: throughput meter implementation")
Cc: stable@kernel.org
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Co-developed-by: Luxing Yin <tr0jan@lzu.edu.cn>
Signed-off-by: Luxing Yin <tr0jan@lzu.edu.cn>
Signed-off-by: Jiexun Wang <wangjiexun2025@gmail.com>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
24 lines
673 B
C
24 lines
673 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (C) B.A.T.M.A.N. contributors:
|
|
*
|
|
* Edo Monticelli, Antonio Quartulli
|
|
*/
|
|
|
|
#ifndef _NET_BATMAN_ADV_TP_METER_H_
|
|
#define _NET_BATMAN_ADV_TP_METER_H_
|
|
|
|
#include "main.h"
|
|
|
|
#include <linux/skbuff.h>
|
|
#include <linux/types.h>
|
|
|
|
void batadv_tp_meter_init(void);
|
|
void batadv_tp_start(struct batadv_priv *bat_priv, const u8 *dst,
|
|
u32 test_length, u32 *cookie);
|
|
void batadv_tp_stop(struct batadv_priv *bat_priv, const u8 *dst,
|
|
u8 return_value);
|
|
void batadv_tp_stop_all(struct batadv_priv *bat_priv);
|
|
void batadv_tp_meter_recv(struct batadv_priv *bat_priv, struct sk_buff *skb);
|
|
|
|
#endif /* _NET_BATMAN_ADV_TP_METER_H_ */
|