All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/6] staging: rtl8188eu: use safe iterator in rtw_free_network_queue
@ 2021-05-16 16:06 Martin Kaiser
  2021-05-16 16:06 ` [PATCH 2/6] staging: rtl8188eu: use safe iterator in rtw_free_all_stainfo Martin Kaiser
                   ` (8 more replies)
  0 siblings, 9 replies; 39+ messages in thread
From: Martin Kaiser @ 2021-05-16 16:06 UTC (permalink / raw)
  To: Larry Finger, Greg Kroah-Hartman, Guenter Roeck
  Cc: linux-staging, kernel-janitors, linux-kernel, Martin Kaiser

rtw_free_network_queue iterates over the scanned wireless networks and
calls _rtw_free_network for each of them. In some cases,
_rtw_free_network removes a network from the list.

We have to use list_for_each_safe if we remove list entries while we
iterate over a list.

Fixes: 23017c8842d2 ("staging: rtl8188eu: Use list iterators and helpers")
Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
Without this patch, it's easy to get the driver into an endless loop by
scanning, connecting and disconnecting repeatedly.

wpa_supplicant -B -Dwext -i wlan0 -c /path/to/my/config...
while true ; do
   sleep 1
   wpa_cli reconfigure     
   wpa_cli add_network
   wpa_cli set_network 0 ssid ...
   wpa_cli set_network 0 psk ...
   wpa_cli select_network 0
   sleep 6
   wpa_cli status
   wpa_cli disconnect 0
done

 drivers/staging/rtl8188eu/core/rtw_mlme.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c
index 159465b073c2..14816ad51668 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c
@@ -199,7 +199,7 @@ struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr)
 
 void rtw_free_network_queue(struct adapter *padapter, u8 isfreeall)
 {
-	struct list_head *phead, *plist;
+	struct list_head *phead, *plist, *temp;
 	struct wlan_network *pnetwork;
 	struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
 	struct __queue *scanned_queue = &pmlmepriv->scanned_queue;
@@ -207,7 +207,7 @@ void rtw_free_network_queue(struct adapter *padapter, u8 isfreeall)
 	spin_lock_bh(&scanned_queue->lock);
 
 	phead = get_list_head(scanned_queue);
-	list_for_each(plist, phead) {
+	list_for_each_safe(plist, temp, phead) {
 		pnetwork = list_entry(plist, struct wlan_network, list);
 
 		_rtw_free_network(pmlmepriv, pnetwork, isfreeall);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 39+ messages in thread

end of thread, other threads:[~2023-05-08  9:00 UTC | newest]

Thread overview: 39+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-16 16:06 [PATCH 1/6] staging: rtl8188eu: use safe iterator in rtw_free_network_queue Martin Kaiser
2021-05-16 16:06 ` [PATCH 2/6] staging: rtl8188eu: use safe iterator in rtw_free_all_stainfo Martin Kaiser
2021-05-16 19:24   ` Guenter Roeck
2021-05-16 16:06 ` [PATCH 3/6] staging: rtl8188eu: use safe iterator in expire_timeout_chk Martin Kaiser
2021-05-16 19:24   ` Guenter Roeck
2021-05-16 16:06 ` [PATCH 4/6] staging: rtl8188eu: use safe iterator in rtw_acl_remove_sta Martin Kaiser
2021-05-16 19:24   ` Guenter Roeck
2021-05-16 16:06 ` [PATCH 5/6] staging: rtl8188eu: use safe iterator in rtw_sta_flush Martin Kaiser
2021-05-16 19:24   ` Guenter Roeck
2021-05-16 16:06 ` [PATCH 6/6] staging: rtl8188eu: use safe iterator in rtw_free_xmitframe_queue Martin Kaiser
2021-05-16 19:24   ` Guenter Roeck
2021-05-16 19:24 ` [PATCH 1/6] staging: rtl8188eu: use safe iterator in rtw_free_network_queue Guenter Roeck
2021-05-16 20:03 ` Christophe JAILLET
2021-05-17 20:21   ` Martin Kaiser
2021-05-17 15:57 ` Dan Carpenter
2021-05-18  8:28   ` Dan Carpenter
2021-05-19 14:16     ` Dan Carpenter
2021-05-19 14:16     ` [PATCH] staging: emxx_udc: fix loop in _nbu2ss_nuke() Dan Carpenter
2021-05-19 14:17     ` [PATCH] w1: fix loop in w1_fini() Dan Carpenter
2023-05-08  8:59       ` (subset) " Krzysztof Kozlowski
2021-05-19 14:18     ` [bug report] {net, IB}/mlx5: Manage port association for multiport RoCE Dan Carpenter
2021-05-20  8:09       ` Leon Romanovsky
2021-05-19 14:19     ` [bug report] Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode Dan Carpenter
2021-05-19 14:20     ` [PATCH] scsi: libsas: use _safe() loop in sas_resume_port() Dan Carpenter
2021-05-19 14:48       ` John Garry
2021-05-22  4:40       ` Martin K. Petersen
2021-05-17 20:18 ` [PATCH v2 1/6] staging: rtl8188eu: use safe iterator in rtw_free_network_queue Martin Kaiser
2021-05-17 20:18   ` [PATCH v2 2/6] staging: rtl8188eu: use safe iterator in rtw_free_all_stainfo Martin Kaiser
2021-05-17 20:32     ` Guenter Roeck
2021-05-17 20:18   ` [PATCH v2 3/6] staging: rtl8188eu: use safe iterator in expire_timeout_chk Martin Kaiser
2021-05-17 20:33     ` Guenter Roeck
2021-05-17 20:18   ` [PATCH v2 4/6] staging: rtl8188eu: use safe iterator in rtw_acl_remove_sta Martin Kaiser
2021-05-17 20:34     ` Guenter Roeck
2021-05-17 20:18   ` [PATCH v2 5/6] staging: rtl8188eu: use safe iterator in rtw_sta_flush Martin Kaiser
2021-05-17 20:34     ` Guenter Roeck
2021-05-17 20:18   ` [PATCH v2 6/6] staging: rtl8188eu: use safe iterator in rtw_free_xmitframe_queue Martin Kaiser
2021-05-17 20:35     ` Guenter Roeck
2021-05-17 20:30   ` [PATCH v2 1/6] staging: rtl8188eu: use safe iterator in rtw_free_network_queue Guenter Roeck
2021-05-18  7:44   ` Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.