On 3/27/2025 3:05 AM, Muna Sinada wrote: > From: Sidhanta Sahu <sidhanta.sahu@xxxxxxxxxxxxxxxx> > > rx_stats for each arsta is allocated when adding a station. > arsta->rx_stats will be freed when a station is removed. > > Redundant allocations are occurring when the same station is added > multiple times. This causes ath12k_mac_station_add() to be called > multiple times, and rx_stats is allocated each time. As a result there > is memory leaks. > > Prevent multiple allocations of rx_stats when ath12k_mac_station_add() > is called repeatedly by checking if rx_stats is already allocated > before allocating again. Allocate arsta->rx_stats if arsta->rx_stats > is NULL respectively. > > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 > Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 > > Signed-off-by: Sidhanta Sahu <sidhanta.sahu@xxxxxxxxxxxxxxxx> > Signed-off-by: Muna Sinada <muna.sinada@xxxxxxxxxxxxxxxx> > --- > drivers/net/wireless/ath/ath12k/mac.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c > index 842eda56c8b1..f157a85111d9 100644 > --- a/drivers/net/wireless/ath/ath12k/mac.c > +++ b/drivers/net/wireless/ath/ath12k/mac.c > @@ -5663,10 +5663,13 @@ static int ath12k_mac_station_add(struct ath12k *ar, > ar->max_num_stations); > goto exit; > } > - arsta->rx_stats = kzalloc(sizeof(*arsta->rx_stats), GFP_KERNEL); > + > if (!arsta->rx_stats) { > - ret = -ENOMEM; > - goto dec_num_station; > + arsta->rx_stats = kzalloc(sizeof(*arsta->rx_stats), GFP_KERNEL); > + if (!arsta->rx_stats) { > + ret = -ENOMEM; > + goto dec_num_station; > + } > } > > peer_param.vdev_id = arvif->vdev_id; > > base-commit: c0dd3f4f70918cbcdd8da611811036a91b7dce33 Reviewed-by: Mahendran P <quic_mahep@xxxxxxxxxxx>