staging: rtl8723bs: use list_for_each_safe in loops deleting iterated items
authorFabio Aiuto <fabioaiuto83@gmail.com>
Mon, 7 Jun 2021 13:46:18 +0000 (15:46 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 9 Jun 2021 12:28:15 +0000 (14:28 +0200)
Fix some beautified loops over linked lists.
Use list_for_each_safe on loops which could delete
objects in the list.

Fixes: b3cd518c5abd ("staging: rtl8723bs: Use list iterators and helpers")
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Tested-by: Fabio Aiuto <fabioaiuto83@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Fabio Aiuto <fabioaiuto83@gmail.com>
Link: https://lore.kernel.org/r/20210607134618.11237-1-fabioaiuto83@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8723bs/core/rtw_ap.c
drivers/staging/rtl8723bs/core/rtw_mlme.c
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
drivers/staging/rtl8723bs/core/rtw_sta_mgt.c
drivers/staging/rtl8723bs/core/rtw_xmit.c
drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c

index 98b1bec6799929e06af1de77a3e5c4e3861606a2..23bbdf0846319e319ff98a8c70329da22cda5804 100644 (file)
@@ -174,7 +174,7 @@ u8 chk_sta_is_alive(struct sta_info *psta)
 
 void expire_timeout_chk(struct adapter *padapter)
 {
-       struct list_head        *phead, *plist;
+       struct list_head *phead, *plist, *tmp;
        u8 updated = false;
        struct sta_info *psta = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
@@ -186,7 +186,7 @@ void expire_timeout_chk(struct adapter *padapter)
 
        phead = &pstapriv->auth_list;
        /* check auth_queue */
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                psta = list_entry(plist, struct sta_info, auth_list);
 
                if (psta->expire_to > 0) {
@@ -211,7 +211,7 @@ void expire_timeout_chk(struct adapter *padapter)
 
        phead = &pstapriv->asoc_list;
        /* check asoc_queue */
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                psta = list_entry(plist, struct sta_info, asoc_list);
                if (chk_sta_is_alive(psta) || !psta->expire_to) {
                        psta->expire_to = pstapriv->expire_to;
@@ -1243,7 +1243,7 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr)
 
 void rtw_acl_remove_sta(struct adapter *padapter, u8 *addr)
 {
-       struct list_head        *plist, *phead;
+       struct list_head *plist, *phead, *tmp;
        struct rtw_wlan_acl_node *paclnode;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
@@ -1253,7 +1253,7 @@ void rtw_acl_remove_sta(struct adapter *padapter, u8 *addr)
        spin_lock_bh(&(pacl_node_q->lock));
 
        phead = get_list_head(pacl_node_q);
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
 
                if (
@@ -1940,7 +1940,7 @@ u8 ap_free_sta(
 
 void rtw_sta_flush(struct adapter *padapter)
 {
-       struct list_head        *phead, *plist;
+       struct list_head *phead, *plist, *tmp;
        struct sta_info *psta = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -1953,7 +1953,7 @@ void rtw_sta_flush(struct adapter *padapter)
        spin_lock_bh(&pstapriv->asoc_list_lock);
        phead = &pstapriv->asoc_list;
        /* free sta asoc_queue */
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                psta = list_entry(plist, struct sta_info, asoc_list);
 
                list_del_init(&psta->asoc_list);
@@ -2132,7 +2132,7 @@ void start_ap_mode(struct adapter *padapter)
 
 void stop_ap_mode(struct adapter *padapter)
 {
-       struct list_head        *phead, *plist;
+       struct list_head *phead, *plist, *tmp;
        struct rtw_wlan_acl_node *paclnode;
        struct sta_info *psta = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
@@ -2156,7 +2156,7 @@ void stop_ap_mode(struct adapter *padapter)
        /* for ACL */
        spin_lock_bh(&(pacl_node_q->lock));
        phead = get_list_head(pacl_node_q);
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
 
                if (paclnode->valid) {
index 7bd9e3a4f34584d7c0f72768125c8ae47cab7988..158f92d4d882419269a66666541fb0cab48a86a6 100644 (file)
@@ -260,7 +260,7 @@ exit:
 
 void rtw_free_network_queue(struct adapter *padapter, u8 isfreeall)
 {
-       struct list_head *phead, *plist;
+       struct list_head *phead, *plist, *tmp;
        struct wlan_network *pnetwork;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct __queue *scanned_queue = &pmlmepriv->scanned_queue;
@@ -268,7 +268,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, tmp, phead) {
 
                pnetwork = list_entry(plist, struct wlan_network, list);
 
index 2b95a49ab469f3820eccc4d0d743d86acaf6c9c6..0f50c2576356fc47acefe739c05e17a9d3f414dd 100644 (file)
@@ -6058,7 +6058,7 @@ u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf)
 u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
 {
        struct sta_info *psta_bmc;
-       struct list_head        *xmitframe_plist, *xmitframe_phead;
+       struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
        struct xmit_frame *pxmitframe = NULL;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
        struct sta_priv  *pstapriv = &padapter->stapriv;
@@ -6075,7 +6075,7 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
                spin_lock_bh(&pxmitpriv->lock);
 
                xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
-               list_for_each(xmitframe_plist, xmitframe_phead) {
+               list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
                        pxmitframe = list_entry(xmitframe_plist,
                                                struct xmit_frame, list);
 
index fa164d25f4ebc004c07d0f518f39d95607d16aea..67ca219f95bf800bf10ff53496a5ced944a209b3 100644 (file)
@@ -423,7 +423,7 @@ exit:
 /*  free all stainfo which in sta_hash[all] */
 void rtw_free_all_stainfo(struct adapter *padapter)
 {
-       struct list_head        *plist, *phead;
+       struct list_head *plist, *phead, *tmp;
        s32     index;
        struct sta_info *psta = NULL;
        struct  sta_priv *pstapriv = &padapter->stapriv;
@@ -436,7 +436,7 @@ void rtw_free_all_stainfo(struct adapter *padapter)
 
        for (index = 0; index < NUM_STA; index++) {
                phead = &(pstapriv->sta_hash[index]);
-               list_for_each(plist, phead) {
+               list_for_each_safe(plist, tmp, phead) {
                        psta = list_entry(plist, struct sta_info, hash_list);
 
                        if (pbcmc_stainfo != psta)
index e37c4ba50d6d83c931cd5a523a59fd3f5a118447..0562fa6c12557f43f3aa88a2f7d39b3a85181bcc 100644 (file)
@@ -1723,13 +1723,13 @@ exit:
 
 void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct __queue *pframequeue)
 {
-       struct list_head        *plist, *phead;
+       struct list_head *plist, *phead, *tmp;
        struct  xmit_frame      *pxmitframe;
 
        spin_lock_bh(&pframequeue->lock);
 
        phead = get_list_head(pframequeue);
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                pxmitframe = list_entry(plist, struct xmit_frame, list);
 
                rtw_free_xmitframe(pxmitpriv, pxmitframe);
@@ -2122,7 +2122,7 @@ signed int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct x
 static void dequeue_xmitframes_to_sleeping_queue(struct adapter *padapter, struct sta_info *psta, struct __queue *pframequeue)
 {
        signed int ret;
-       struct list_head        *plist, *phead;
+       struct list_head *plist, *phead, *tmp;
        u8 ac_index;
        struct tx_servq *ptxservq;
        struct pkt_attrib       *pattrib;
@@ -2130,7 +2130,7 @@ static void dequeue_xmitframes_to_sleeping_queue(struct adapter *padapter, struc
        struct hw_xmit *phwxmits =  padapter->xmitpriv.hwxmits;
 
        phead = get_list_head(pframequeue);
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                pxmitframe = list_entry(plist, struct xmit_frame, list);
 
                pattrib = &pxmitframe->attrib;
@@ -2191,7 +2191,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
 {
        u8 update_mask = 0, wmmps_ac = 0;
        struct sta_info *psta_bmc;
-       struct list_head        *xmitframe_plist, *xmitframe_phead;
+       struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
        struct xmit_frame *pxmitframe = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -2201,7 +2201,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
        spin_lock_bh(&pxmitpriv->lock);
 
        xmitframe_phead = get_list_head(&psta->sleep_q);
-       list_for_each(xmitframe_plist, xmitframe_phead) {
+       list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
                pxmitframe = list_entry(xmitframe_plist, struct xmit_frame,
                                        list);
 
@@ -2272,7 +2272,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
 
        if ((pstapriv->sta_dz_bitmap&0xfffe) == 0x0) { /* no any sta in ps mode */
                xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
-               list_for_each(xmitframe_plist, xmitframe_phead) {
+               list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
                        pxmitframe = list_entry(xmitframe_plist,
                                                struct xmit_frame, list);
 
@@ -2308,7 +2308,7 @@ _exit:
 void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *psta)
 {
        u8 wmmps_ac = 0;
-       struct list_head        *xmitframe_plist, *xmitframe_phead;
+       struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
        struct xmit_frame *pxmitframe = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -2316,7 +2316,7 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst
        spin_lock_bh(&pxmitpriv->lock);
 
        xmitframe_phead = get_list_head(&psta->sleep_q);
-       list_for_each(xmitframe_plist, xmitframe_phead) {
+       list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
                pxmitframe = list_entry(xmitframe_plist, struct xmit_frame,
                                        list);
 
index ec9f275cbc7e1b229ea1c9ef9081bea92432559b..a05d43b716ee37ff2cc721df1363ea4ce019fc0a 100644 (file)
@@ -178,7 +178,7 @@ static s32 xmit_xmitframes(struct adapter *padapter, struct xmit_priv *pxmitpriv
        struct hw_xmit *hwxmits, *phwxmit;
        u8 idx, hwentry;
        struct tx_servq *ptxservq;
-       struct list_head *sta_plist, *sta_phead, *frame_plist, *frame_phead;
+       struct list_head *sta_plist, *sta_phead, *frame_plist, *frame_phead, *tmp;
        struct xmit_frame *pxmitframe;
        struct __queue *pframe_queue;
        struct xmit_buf *pxmitbuf;
@@ -225,7 +225,7 @@ static s32 xmit_xmitframes(struct adapter *padapter, struct xmit_priv *pxmitpriv
                sta_phead = get_list_head(phwxmit->sta_queue);
                /* because stop_sta_xmit may delete sta_plist at any time */
                /* so we should add lock here, or while loop can not exit */
-               list_for_each(sta_plist, sta_phead) {
+               list_for_each_safe(sta_plist, tmp, sta_phead) {
                        ptxservq = list_entry(sta_plist, struct tx_servq,
                                              tx_pending);
 
index 9a6e47877c4e9e48a74b6d80f3a8fb70807ea290..c10146428757689a42f6f7def678cd30fe755577 100644 (file)
@@ -2453,7 +2453,7 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev
                                    struct station_del_parameters *params)
 {
        int ret = 0;
-       struct list_head        *phead, *plist;
+       struct list_head *phead, *plist, *tmp;
        u8 updated = false;
        struct sta_info *psta = NULL;
        struct adapter *padapter = rtw_netdev_priv(ndev);
@@ -2483,7 +2483,7 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev
 
        phead = &pstapriv->asoc_list;
        /* check asoc_queue */
-       list_for_each(plist, phead) {
+       list_for_each_safe(plist, tmp, phead) {
                psta = list_entry(plist, struct sta_info, asoc_list);
 
                if (!memcmp((u8 *)mac, psta->hwaddr, ETH_ALEN)) {