57 lines
2.0 KiB
Diff
57 lines
2.0 KiB
Diff
From c04bbc2b1df7034f463ef512c34010b71c12c257 Mon Sep 17 00:00:00 2001
|
|
From: Iyappan Subramanian <isubramanian@apm.com>
|
|
Date: Thu, 21 Aug 2014 13:44:48 -0700
|
|
Subject: [PATCH 3/4] net: xgene: fix possible NULL dereference in
|
|
xgene_enet_free_desc_rings()
|
|
|
|
A NULL pointer dereference is possible for the argument ring->buf_pool
|
|
which is passed to xgene_enet_free_desc_ring(), as ring could be NULL.
|
|
|
|
And now since NULL pointers are being checked for before the calls to
|
|
xgene_enet_free_desc_ring(), might as well take advantage of them and
|
|
not call the function if the argument would be NULL.
|
|
|
|
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|
Signed-off-by: Iyappan Subramanian <isubramanian@apm.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
drivers/net/ethernet/apm/xgene/xgene_enet_main.c | 20 +++++++++++++-------
|
|
1 file changed, 13 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
|
|
index e1a8f4e..e4222af 100644
|
|
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
|
|
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
|
|
@@ -563,15 +563,21 @@ static void xgene_enet_free_desc_rings(struct xgene_enet_pdata *pdata)
|
|
struct xgene_enet_desc_ring *ring;
|
|
|
|
ring = pdata->tx_ring;
|
|
- if (ring && ring->cp_ring && ring->cp_ring->cp_skb)
|
|
- devm_kfree(dev, ring->cp_ring->cp_skb);
|
|
- xgene_enet_free_desc_ring(ring);
|
|
+ if (ring) {
|
|
+ if (ring->cp_ring && ring->cp_ring->cp_skb)
|
|
+ devm_kfree(dev, ring->cp_ring->cp_skb);
|
|
+ xgene_enet_free_desc_ring(ring);
|
|
+ }
|
|
|
|
ring = pdata->rx_ring;
|
|
- if (ring && ring->buf_pool && ring->buf_pool->rx_skb)
|
|
- devm_kfree(dev, ring->buf_pool->rx_skb);
|
|
- xgene_enet_free_desc_ring(ring->buf_pool);
|
|
- xgene_enet_free_desc_ring(ring);
|
|
+ if (ring) {
|
|
+ if (ring->buf_pool) {
|
|
+ if (ring->buf_pool->rx_skb)
|
|
+ devm_kfree(dev, ring->buf_pool->rx_skb);
|
|
+ xgene_enet_free_desc_ring(ring->buf_pool);
|
|
+ }
|
|
+ xgene_enet_free_desc_ring(ring);
|
|
+ }
|
|
}
|
|
|
|
static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring(
|
|
--
|
|
1.7.10.4
|
|
|