brcmfmac: check ndev pointer
authorTom Rix <trix@redhat.com>
Sun, 2 Aug 2020 16:18:04 +0000 (09:18 -0700)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 18 Aug 2020 12:49:28 +0000 (15:49 +0300)
Clang static analysis reports this error

brcmfmac/core.c:490:4: warning: Dereference of null pointer
        (*ifp)->ndev->stats.rx_errors++;
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In this block of code

if (ret || !(*ifp) || !(*ifp)->ndev) {
if (ret != -ENODATA && *ifp)
(*ifp)->ndev->stats.rx_errors++;
brcmu_pkt_buf_free_skb(skb);
return -ENODATA;
}

(*ifp)->ndev being NULL is caught as an error
But then it is used to report the error.

So add a check before using it.

Fixes: 91b632803ee4 ("brcmfmac: Use net_device_stats from struct net_device")
Signed-off-by: Tom Rix <trix@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200802161804.6126-1-trix@redhat.com
drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c

index f89010a81ffbe098c57d75150641d9416e954d58..aa9ced3c86fbd8e2b45bbc7879577d8665c114d5 100644 (file)
@@ -486,7 +486,7 @@ static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
        ret = brcmf_proto_hdrpull(drvr, true, skb, ifp);
 
        if (ret || !(*ifp) || !(*ifp)->ndev) {
-               if (ret != -ENODATA && *ifp)
+               if (ret != -ENODATA && *ifp && (*ifp)->ndev)
                        (*ifp)->ndev->stats.rx_errors++;
                brcmu_pkt_buf_free_skb(skb);
                return -ENODATA;