]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
staging: r8188eu: add check for kzalloc
authorJiasheng Jiang <jiasheng@iscas.ac.cn>
Wed, 18 May 2022 07:59:57 +0000 (15:59 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Jun 2022 16:41:18 +0000 (18:41 +0200)
[ Upstream commit f94b47c6bde624d6c07f43054087607c52054a95 ]

As kzalloc() may return null pointer, it should be better to
check the return value and return error if fails in order
to avoid dereference of null pointer.
Moreover, the return value of rtw_alloc_hwxmits() should also
be dealt with.

Fixes: 15865124feed ("staging: r8188eu: introduce new core dir for RTL8188eu driver")
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Link: https://lore.kernel.org/r/20220518075957.514603-1-jiasheng@iscas.ac.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/staging/r8188eu/core/rtw_xmit.c
drivers/staging/r8188eu/include/rtw_xmit.h

index 8503059edc46bfd0f5ad097c517d85bcd13845da..f4e9f61025392b14699c6e3ac817cd4aacf94729 100644 (file)
@@ -179,7 +179,12 @@ s32        _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter)
 
        pxmitpriv->free_xmit_extbuf_cnt = num_xmit_extbuf;
 
-       rtw_alloc_hwxmits(padapter);
+       res = rtw_alloc_hwxmits(padapter);
+       if (res) {
+               res = _FAIL;
+               goto exit;
+       }
+
        rtw_init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
 
        for (i = 0; i < 4; i++)
@@ -1496,7 +1501,7 @@ exit:
        return res;
 }
 
-void rtw_alloc_hwxmits(struct adapter *padapter)
+int rtw_alloc_hwxmits(struct adapter *padapter)
 {
        struct hw_xmit *hwxmits;
        struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -1504,6 +1509,8 @@ void rtw_alloc_hwxmits(struct adapter *padapter)
        pxmitpriv->hwxmit_entry = HWXMIT_ENTRY;
 
        pxmitpriv->hwxmits = kzalloc(sizeof(struct hw_xmit) * pxmitpriv->hwxmit_entry, GFP_KERNEL);
+       if (!pxmitpriv->hwxmits)
+               return -ENOMEM;
 
        hwxmits = pxmitpriv->hwxmits;
 
@@ -1520,6 +1527,8 @@ void rtw_alloc_hwxmits(struct adapter *padapter)
                hwxmits[3] .sta_queue = &pxmitpriv->bk_pending;
        } else {
        }
+
+       return 0;
 }
 
 void rtw_free_hwxmits(struct adapter *padapter)
index b2df1480d66b39c5b2023631be4acb5ba5d9b1ae..e73632972900d15ea7b000ee7aca03ea6c1690d3 100644 (file)
@@ -341,7 +341,7 @@ s32 rtw_txframes_sta_ac_pending(struct adapter *padapter,
 void rtw_init_hwxmits(struct hw_xmit *phwxmit, int entry);
 s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter);
 void _rtw_free_xmit_priv(struct xmit_priv *pxmitpriv);
-void rtw_alloc_hwxmits(struct adapter *padapter);
+int rtw_alloc_hwxmits(struct adapter *padapter);
 void rtw_free_hwxmits(struct adapter *padapter);
 s32 rtw_xmit(struct adapter *padapter, struct sk_buff **pkt);