staging: rtl*: Remove tasklet callback casts
authorKees Cook <keescook@chromium.org>
Fri, 15 Nov 2019 17:28:28 +0000 (09:28 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 16 Nov 2019 13:41:02 +0000 (14:41 +0100)
In order to make the entire kernel usable under Clang's Control Flow
Integrity protections, function prototype casts need to be avoided
because this will trip CFI checks at runtime (i.e. a mismatch between
the caller's expected function prototype and the destination function's
prototype). Many of these cases can be found with -Wcast-function-type,
which found that the rtl wifi drivers had a bunch of needless function
casts. Remove function casts for tasklet callbacks in the various drivers.

Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/201911150926.2894A4F973@keescook
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
13 files changed:
drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c
drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c
drivers/staging/rtl8188eu/include/rtl8188e_recv.h
drivers/staging/rtl8188eu/include/rtl8188e_xmit.h
drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
drivers/staging/rtl8192e/rtllib_softmac.c
drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
drivers/staging/rtl8192u/r8192U_core.c
drivers/staging/rtl8712/rtl8712_recv.c
drivers/staging/rtl8712/rtl871x_xmit.c
drivers/staging/rtl8712/rtl871x_xmit.h
drivers/staging/rtl8712/usb_ops_linux.c
drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c

index c0d51ba70a751dc27673715099ba6bc5500c19c8..1cf8cff9a2a4d9416ed15e34974ad910b15c3d9f 100644 (file)
@@ -22,8 +22,7 @@ int   rtw_hal_init_recv_priv(struct adapter *padapter)
        int     i, res = _SUCCESS;
        struct recv_buf *precvbuf;
 
-       tasklet_init(&precvpriv->recv_tasklet,
-                    (void(*)(unsigned long))rtl8188eu_recv_tasklet,
+       tasklet_init(&precvpriv->recv_tasklet, rtl8188eu_recv_tasklet,
                     (unsigned long)padapter);
 
        /* init recv_buf */
index ab94ad9d608ae011205483eb978616c723e15b83..2808f2b119bf9f0917fd9962008ebb06182f03a7 100644 (file)
@@ -17,8 +17,7 @@ s32 rtw_hal_init_xmit_priv(struct adapter *adapt)
 {
        struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
 
-       tasklet_init(&pxmitpriv->xmit_tasklet,
-                    (void(*)(unsigned long))rtl8188eu_xmit_tasklet,
+       tasklet_init(&pxmitpriv->xmit_tasklet, rtl8188eu_xmit_tasklet,
                     (unsigned long)adapt);
        return _SUCCESS;
 }
index c2c7ef974dc5c7a34d1431f9c0aa4234820347a5..23251ffa8404732ed801b5776bbd46f9d6067d91 100644 (file)
@@ -43,7 +43,7 @@ enum rx_packet_type {
 };
 
 #define INTERRUPT_MSG_FORMAT_LEN 60
-void rtl8188eu_recv_tasklet(void *priv);
+void rtl8188eu_recv_tasklet(unsigned long priv);
 void rtl8188e_process_phy_info(struct adapter *padapter,
                               struct recv_frame *prframe);
 void update_recvframe_phyinfo_88e(struct recv_frame *fra, struct phy_stat *phy);
index 421e9f45306f37ac49851947eaba4803872c1b9c..c6c2ad20d9cfc5cd6ada09602fddd2d203e68a9c 100644 (file)
@@ -148,7 +148,7 @@ void rtl8188e_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc,
 s32 rtl8188eu_init_xmit_priv(struct adapter *padapter);
 s32 rtl8188eu_xmit_buf_handler(struct adapter *padapter);
 #define hal_xmit_handler rtl8188eu_xmit_buf_handler
-void rtl8188eu_xmit_tasklet(void *priv);
+void rtl8188eu_xmit_tasklet(unsigned long priv);
 bool rtl8188eu_xmitframe_complete(struct adapter *padapter,
                                  struct xmit_priv *pxmitpriv);
 
index aaab0d5774537238d487766c6cd8e818e90f3c67..3cd6da1f843d23a11a78ac512069392feb141dc4 100644 (file)
@@ -773,10 +773,10 @@ void usb_write_port_cancel(struct adapter *padapter)
        }
 }
 
-void rtl8188eu_recv_tasklet(void *priv)
+void rtl8188eu_recv_tasklet(unsigned long priv)
 {
        struct sk_buff *pskb;
-       struct adapter *adapt = priv;
+       struct adapter *adapt = (struct adapter *)priv;
        struct recv_priv *precvpriv = &adapt->recvpriv;
 
        while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {
@@ -792,9 +792,9 @@ void rtl8188eu_recv_tasklet(void *priv)
        }
 }
 
-void rtl8188eu_xmit_tasklet(void *priv)
+void rtl8188eu_xmit_tasklet(unsigned long priv)
 {
-       struct adapter *adapt = priv;
+       struct adapter *adapt = (struct adapter *)priv;
        struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
 
        if (check_fwstate(&adapt->mlmepriv, _FW_UNDER_SURVEY))
index f2f7529e7c80e19aeeda0194594f45226d57bb6b..6e2f620afd14025bbc08dfff1c9805e4c5400a48 100644 (file)
@@ -2044,8 +2044,9 @@ static short rtllib_sta_ps_sleep(struct rtllib_device *ieee, u64 *time)
 
 }
 
-static inline void rtllib_sta_ps(struct rtllib_device *ieee)
+static inline void rtllib_sta_ps(unsigned long data)
 {
+       struct rtllib_device *ieee = (struct rtllib_device *)data;
        u64 time;
        short sleep;
        unsigned long flags, flags2;
@@ -3027,9 +3028,7 @@ void rtllib_softmac_init(struct rtllib_device *ieee)
        spin_lock_init(&ieee->mgmt_tx_lock);
        spin_lock_init(&ieee->beacon_lock);
 
-       tasklet_init(&ieee->ps_task,
-            (void(*)(unsigned long)) rtllib_sta_ps,
-            (unsigned long)ieee);
+       tasklet_init(&ieee->ps_task, rtllib_sta_ps, (unsigned long)ieee);
 
 }
 
index bd5b554787d182fa6b3bb6a05e3d2303e01a9857..90692db81b71b35214e5990de75bdd9bae163eb3 100644 (file)
@@ -1683,8 +1683,9 @@ static short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h,
        return 1;
 }
 
-static inline void ieee80211_sta_ps(struct ieee80211_device *ieee)
+static inline void ieee80211_sta_ps(unsigned long data)
 {
+       struct ieee80211_device *ieee = (struct ieee80211_device *)data;
        u32 th, tl;
        short sleep;
 
@@ -2593,9 +2594,7 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee)
        spin_lock_init(&ieee->mgmt_tx_lock);
        spin_lock_init(&ieee->beacon_lock);
 
-       tasklet_init(&ieee->ps_task,
-                    (void(*)(unsigned long)) ieee80211_sta_ps,
-                    (unsigned long)ieee);
+       tasklet_init(&ieee->ps_task, ieee80211_sta_ps, (unsigned long)ieee);
 }
 
 void ieee80211_softmac_free(struct ieee80211_device *ieee)
index 48f1591ed5b4b4dcbb9bdd4ac1a113b0ba6728cc..7e2cabd16e880d92602b4fca0ea71afaf60b41bd 100644 (file)
@@ -2193,7 +2193,7 @@ static void rtl8192_init_priv_lock(struct r8192_priv *priv)
 
 static void rtl819x_watchdog_wqcallback(struct work_struct *work);
 
-static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv);
+static void rtl8192_irq_rx_tasklet(unsigned long data);
 /* init tasklet and wait_queue here. only 2.6 above kernel is considered */
 #define DRV_NAME "wlan0"
 static void rtl8192_init_priv_task(struct net_device *dev)
@@ -2214,8 +2214,7 @@ static void rtl8192_init_priv_task(struct net_device *dev)
                          InitialGainOperateWorkItemCallBack);
        INIT_WORK(&priv->qos_activate, rtl8192_qos_activate);
 
-       tasklet_init(&priv->irq_rx_tasklet,
-                    (void(*)(unsigned long))rtl8192_irq_rx_tasklet,
+       tasklet_init(&priv->irq_rx_tasklet, rtl8192_irq_rx_tasklet,
                     (unsigned long)priv);
 }
 
@@ -4655,8 +4654,9 @@ static void rtl8192_rx_cmd(struct sk_buff *skb)
        }
 }
 
-static void rtl8192_irq_rx_tasklet(struct r8192_priv *priv)
+static void rtl8192_irq_rx_tasklet(unsigned long data)
 {
+       struct r8192_priv *priv = (struct r8192_priv *)data;
        struct sk_buff *skb;
        struct rtl8192_rx_info *info;
 
index 06de031be6a9c23caad7b9610f6fa00150569b45..00ea0beb12c90d6bf57d1309ecdff361c9a1793b 100644 (file)
@@ -33,7 +33,7 @@ static u8 bridge_tunnel_header[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8};
 /* Ethernet-II snap header (RFC1042 for most EtherTypes) */
 static u8 rfc1042_header[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
 
-static void recv_tasklet(void *priv);
+static void recv_tasklet(unsigned long priv);
 
 void r8712_init_recv_priv(struct recv_priv *precvpriv,
                          struct _adapter *padapter)
@@ -65,8 +65,7 @@ void r8712_init_recv_priv(struct recv_priv *precvpriv,
                precvbuf++;
        }
        precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
-       tasklet_init(&precvpriv->recv_tasklet,
-                    (void(*)(unsigned long))recv_tasklet,
+       tasklet_init(&precvpriv->recv_tasklet, recv_tasklet,
                     (unsigned long)padapter);
        skb_queue_head_init(&precvpriv->rx_skb_queue);
 
@@ -1078,10 +1077,10 @@ static void recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
        } while ((transfer_len > 0) && pkt_cnt > 0);
 }
 
-static void recv_tasklet(void *priv)
+static void recv_tasklet(unsigned long priv)
 {
        struct sk_buff *pskb;
-       struct _adapter *padapter = priv;
+       struct _adapter *padapter = (struct _adapter *)priv;
        struct recv_priv *precvpriv = &padapter->recvpriv;
 
        while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {
index cc5809e49e356fa8ff77f4afa96165adc5c30964..f0b85338b567cd5009935c12ef5d1a3ff57645c8 100644 (file)
@@ -143,9 +143,8 @@ int _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv,
        INIT_WORK(&padapter->wk_filter_rx_ff0, r8712_SetFilter);
        alloc_hwxmits(padapter);
        init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
-       tasklet_init(&pxmitpriv->xmit_tasklet,
-               (void(*)(unsigned long))r8712_xmit_bh,
-               (unsigned long)padapter);
+       tasklet_init(&pxmitpriv->xmit_tasklet, r8712_xmit_bh,
+                    (unsigned long)padapter);
        return 0;
 }
 
index b14da38bf65241ad2784f62986c9f47ea4007fb0..f227828094bfd9fc29b8e18cd0caa266b11545ff 100644 (file)
@@ -277,7 +277,7 @@ int r8712_pre_xmit(struct _adapter *padapter, struct xmit_frame *pxmitframe);
 int r8712_xmit_enqueue(struct _adapter *padapter,
                       struct xmit_frame *pxmitframe);
 void r8712_xmit_direct(struct _adapter *padapter, struct xmit_frame *pxmitframe);
-void r8712_xmit_bh(void *priv);
+void r8712_xmit_bh(unsigned long priv);
 
 void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe,
                        struct xmit_buf *pxmitbuf);
index 9d290bc2fdb7f68e998af0a8cc6f4f59d0edc66e..0045da3bb69a61e63d7c6a98f38318fbe242d05f 100644 (file)
@@ -308,10 +308,10 @@ void r8712_usb_read_port_cancel(struct _adapter *padapter)
        }
 }
 
-void r8712_xmit_bh(void *priv)
+void r8712_xmit_bh(unsigned long priv)
 {
        int ret = false;
-       struct _adapter *padapter = priv;
+       struct _adapter *padapter = (struct _adapter *)priv;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
 
        if (padapter->driver_stopped ||
index e8577c084bbd69b54ea5074eaa8d6d33b93f7ecc..1e8b614434082988836fdd62b18ffecb159c11fc 100644 (file)
@@ -230,7 +230,7 @@ static inline bool pkt_exceeds_tail(struct recv_priv *precvpriv,
        return false;
 }
 
-static void rtl8723bs_recv_tasklet(void *priv)
+static void rtl8723bs_recv_tasklet(unsigned long priv)
 {
        struct adapter *padapter;
        struct hal_com_data *p_hal_data;
@@ -244,7 +244,7 @@ static void rtl8723bs_recv_tasklet(void *priv)
        _pkt *pkt_copy = NULL;
        u8 shift_sz = 0, rx_report_sz = 0;
 
-       padapter = priv;
+       padapter = (struct adapter *)priv;
        p_hal_data = GET_HAL_DATA(padapter);
        precvpriv = &padapter->recvpriv;
        recv_buf_queue = &precvpriv->recv_buf_pending_queue;
@@ -462,11 +462,8 @@ s32 rtl8723bs_init_recv_priv(struct adapter *padapter)
                goto initbuferror;
 
        /* 3 2. init tasklet */
-       tasklet_init(
-               &precvpriv->recv_tasklet,
-               (void(*)(unsigned long))rtl8723bs_recv_tasklet,
-               (unsigned long)padapter
-       );
+       tasklet_init(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet,
+                    (unsigned long)padapter);
 
        goto exit;