[dpdk-dev] net/virtio: Fix crash in virtio_dev_free_mbufs
Checks
Commit Message
virtio_dev_free_mbufs was recently modified to free the
virtqueues but failed to check whether the array was
allocated. Added a check to ensure vqs was non-null.
Fixes: bdb32afbb610 ("net/virtio: rationalize queue flushing")
Cc: olivier.matz@6wind.com
Signed-off-by: David C Harton <dharton@cisco.com>
---
drivers/net/virtio/virtio_ethdev.c | 3 +++
1 file changed, 3 insertions(+)
Comments
On Sat, Feb 03, 2018 at 09:55:23AM -0500, David C Harton wrote:
> virtio_dev_free_mbufs was recently modified to free the
> virtqueues but failed to check whether the array was
> allocated. Added a check to ensure vqs was non-null.
>
> Fixes: bdb32afbb610 ("net/virtio: rationalize queue flushing")
> Cc: olivier.matz@6wind.com
>
> Signed-off-by: David C Harton <dharton@cisco.com>
> ---
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Thank you for this fix.
Out of curiosity, did you see the problem by code review or is there an
easy way to reproduce the crash?
On 02/03/2018 03:55 PM, David C Harton wrote:
> virtio_dev_free_mbufs was recently modified to free the
> virtqueues but failed to check whether the array was
> allocated. Added a check to ensure vqs was non-null.
>
> Fixes: bdb32afbb610 ("net/virtio: rationalize queue flushing")
> Cc: olivier.matz@6wind.com
>
> Signed-off-by: David C Harton <dharton@cisco.com>
> ---
> drivers/net/virtio/virtio_ethdev.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index 2082d6a..884f74a 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -1975,6 +1975,9 @@ static void virtio_dev_free_mbufs(struct rte_eth_dev *dev)
> struct rte_mbuf *buf;
> int queue_type;
>
> + if (hw->vqs == NULL)
> + return;
> +
> for (i = 0; i < nr_vq; i++) {
> vq = hw->vqs[i];
> if (!vq)
>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Thanks,
Maxime
On 2/3/2018 2:55 PM, David C Harton wrote:
> virtio_dev_free_mbufs was recently modified to free the
> virtqueues but failed to check whether the array was
> allocated. Added a check to ensure vqs was non-null.
>
> Fixes: bdb32afbb610 ("net/virtio: rationalize queue flushing")
> Cc: olivier.matz@6wind.com
>
> Signed-off-by: David C Harton <dharton@cisco.com>
[1] Signed-off-by: David Harton <dharton@cisco.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Applied to dpdk-next-net/master, thanks.
[1]
Hi David,
Since your previous commits has "David Harton" name, to prevent seen as a new
person, I kept same name, fyi.
@@ -1975,6 +1975,9 @@ static void virtio_dev_free_mbufs(struct rte_eth_dev *dev)
struct rte_mbuf *buf;
int queue_type;
+ if (hw->vqs == NULL)
+ return;
+
for (i = 0; i < nr_vq; i++) {
vq = hw->vqs[i];
if (!vq)