[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] virtio-pci: fix virtio_pci_queue_enabled()
From: |
Richard Henderson |
Subject: |
Re: [PATCH] virtio-pci: fix virtio_pci_queue_enabled() |
Date: |
Mon, 27 Jul 2020 09:15:15 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 |
On 7/27/20 8:33 AM, Laurent Vivier wrote:
> In legacy mode, virtio_pci_queue_enabled() falls back to
> virtio_queue_enabled() to know if the queue is enabled.
>
> But virtio_queue_enabled() calls again virtio_pci_queue_enabled()
> if k->queue_enabled is set. This ends in a crash after a stack
> overflow.
>
> The problem can be reproduced with
> "-device virtio-net-pci,disable-legacy=off,disable-modern=true
> -net tap,vhost=on"
>
> And a look to the backtrace is very explicit:
>
> ...
> #4 0x000000010029a438 in virtio_queue_enabled ()
> #5 0x0000000100497a9c in virtio_pci_queue_enabled ()
> ...
> #130902 0x000000010029a460 in virtio_queue_enabled ()
> #130903 0x0000000100497a9c in virtio_pci_queue_enabled ()
> #130904 0x000000010029a460 in virtio_queue_enabled ()
> #130905 0x0000000100454a20 in vhost_net_start ()
> ...
>
> This patch fixes the problem by introducing a new function
> for the legacy case and calls it from virtio_pci_queue_enabled().
> It also calls it from virtio_queue_enabled() to avoid code duplication.
>
> Fixes: f19bcdfedd53 ("virtio-pci: implement queue_enabled method")
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: Cindy Lu <lulu@redhat.com>
> CC: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
> ---
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~