net/virtio: fix crash when closing twice
This commit fixs segment fault when rte_eth_dev_close() is called on
a virtio dev more than once. Assigning zero after free to avoids
freed memory to be accessed again.
Fixes: 69c80d4ef8
("net/virtio: allocate queue at init stage")
Cc: stable@dpdk.org
Signed-off-by: Huanle Han <hanxueluo@gmail.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
This commit is contained in:
parent
2c2201fb07
commit
0e78cfddc0
@ -546,6 +546,9 @@ virtio_free_queues(struct virtio_hw *hw)
|
||||
int queue_type;
|
||||
uint16_t i;
|
||||
|
||||
if (hw->vqs == NULL)
|
||||
return;
|
||||
|
||||
for (i = 0; i < nr_vq; i++) {
|
||||
vq = hw->vqs[i];
|
||||
if (!vq)
|
||||
@ -564,9 +567,11 @@ virtio_free_queues(struct virtio_hw *hw)
|
||||
}
|
||||
|
||||
rte_free(vq);
|
||||
hw->vqs[i] = NULL;
|
||||
}
|
||||
|
||||
rte_free(hw->vqs);
|
||||
hw->vqs = NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -986,8 +986,10 @@ rte_eth_dev_close(uint8_t port_id)
|
||||
dev->data->dev_started = 0;
|
||||
(*dev->dev_ops->dev_close)(dev);
|
||||
|
||||
dev->data->nb_rx_queues = 0;
|
||||
rte_free(dev->data->rx_queues);
|
||||
dev->data->rx_queues = NULL;
|
||||
dev->data->nb_tx_queues = 0;
|
||||
rte_free(dev->data->tx_queues);
|
||||
dev->data->tx_queues = NULL;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user