[dpdk-dev,1/2] virtio: fixed segmentation fault in queue_release
Commit Message
if input parameter vq is NULL, hw = vq->hw, causes a segmentation fault.
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
drivers/net/virtio/virtio_ethdev.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
On Tue, 20 Oct 2015 16:37:41 +0100
Bernard Iremonger <bernard.iremonger@intel.com> wrote:
> if input parameter vq is NULL, hw = vq->hw, causes a segmentation fault.
>
> Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index 465d3cd..147aca1 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -239,9 +239,10 @@ virtio_set_multiple_queues(struct rte_eth_dev *dev, uint16_t nb_queues)
>
> void
> virtio_dev_queue_release(struct virtqueue *vq) {
> - struct virtio_hw *hw = vq->hw;
> + struct virtio_hw *hw;
>
> if (vq) {
> + hw = vq->hw;
> /* Select and deactivate the queue */
> VIRTIO_WRITE_REG_2(hw, VIRTIO_PCI_QUEUE_SEL, vq->queue_id);
> VIRTIO_WRITE_REG_4(hw, VIRTIO_PCI_QUEUE_PFN, 0);
This could only happen for the case of the control vq.
Others are guaranteed to be non NULL by rte_ethdev.
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
2015-10-20 11:44, Stephen Hemminger:
> On Tue, 20 Oct 2015 16:37:41 +0100
> Bernard Iremonger <bernard.iremonger@intel.com> wrote:
>
> > if input parameter vq is NULL, hw = vq->hw, causes a segmentation fault.
> >
> > Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
>
> This could only happen for the case of the control vq.
> Others are guaranteed to be non NULL by rte_ethdev.
>
> Acked-by: Stephen Hemminger <stephen@networkplumber.org>
Applied and merged with doc patch, thanks
@@ -239,9 +239,10 @@ virtio_set_multiple_queues(struct rte_eth_dev *dev, uint16_t nb_queues)
void
virtio_dev_queue_release(struct virtqueue *vq) {
- struct virtio_hw *hw = vq->hw;
+ struct virtio_hw *hw;
if (vq) {
+ hw = vq->hw;
/* Select and deactivate the queue */
VIRTIO_WRITE_REG_2(hw, VIRTIO_PCI_QUEUE_SEL, vq->queue_id);
VIRTIO_WRITE_REG_4(hw, VIRTIO_PCI_QUEUE_PFN, 0);