mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 18:49:22 -04:00
staging: rtl8188eu: use safe iterator in rtw_free_network_queue
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_entry_safe if we remove list entries while
we iterate over a list.
Fixes: 23017c8842 ("staging: rtl8188eu: Use list iterators and helpers")
Signed-off-by: Martin Kaiser <martin@kaiser.cx>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20210517201826.25150-1-martin@kaiser.cx
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0c21b72a7f
commit
d5af74ead2
@@ -199,19 +199,17 @@ 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 wlan_network *pnetwork;
|
||||
struct list_head *phead;
|
||||
struct wlan_network *pnetwork, *temp;
|
||||
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
|
||||
struct __queue *scanned_queue = &pmlmepriv->scanned_queue;
|
||||
|
||||
spin_lock_bh(&scanned_queue->lock);
|
||||
|
||||
phead = get_list_head(scanned_queue);
|
||||
list_for_each(plist, phead) {
|
||||
pnetwork = list_entry(plist, struct wlan_network, list);
|
||||
|
||||
list_for_each_entry_safe(pnetwork, temp, phead, list)
|
||||
_rtw_free_network(pmlmepriv, pnetwork, isfreeall);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&scanned_queue->lock);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user