From: John Daley Date: Sat, 11 Jun 2016 17:27:04 +0000 (-0700) Subject: net/enic: fix crash when releasing queues X-Git-Tag: spdx-start~6528 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=83a9d8b7eb06a9a5f99cbe3b529f736077c9a826;p=dpdk.git net/enic: fix crash when releasing queues If device configuration failed due to a lack of resources, such as if more queues are requested than are available, the queue release functions are called with NULL pointers which were being dereferenced. Skip releasing queues if they are NULL pointers. Fixes: fefed3d1e62c ("enic: new driver") Signed-off-by: John Daley --- diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 996f999246..738792e8b8 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -426,9 +426,14 @@ int enic_alloc_intr_resources(struct enic *enic) void enic_free_rq(void *rxq) { - struct vnic_rq *rq = (struct vnic_rq *)rxq; - struct enic *enic = vnic_dev_priv(rq->vdev); + struct vnic_rq *rq; + struct enic *enic; + if (rxq == NULL) + return; + + rq = (struct vnic_rq *)rxq; + enic = vnic_dev_priv(rq->vdev); enic_rxmbuf_queue_release(enic, rq); rte_free(rq->mbuf_ring); rq->mbuf_ring = NULL; @@ -514,9 +519,14 @@ err_exit: void enic_free_wq(void *txq) { - struct vnic_wq *wq = (struct vnic_wq *)txq; - struct enic *enic = vnic_dev_priv(wq->vdev); + struct vnic_wq *wq; + struct enic *enic; + + if (txq == NULL) + return; + wq = (struct vnic_wq *)txq; + enic = vnic_dev_priv(wq->vdev); rte_memzone_free(wq->cqmsg_rz); vnic_wq_free(wq); vnic_cq_free(&enic->cq[enic->rq_count + wq->index]);