diff options
| author | Heinz Graalfs <graalfs@linux.vnet.ibm.com> | 2013-10-28 19:10:47 -0400 |
|---|---|---|
| committer | Rusty Russell <rusty@rustcorp.com.au> | 2013-10-28 20:58:19 -0400 |
| commit | 047b9b94951dba2e93c65a582ae2bce25c960b86 (patch) | |
| tree | 0164b14f46fb84a8508445611edbbcadc377096e /drivers | |
| parent | 40e4dc530118dbb79e270d5554ac8415588378d2 (diff) | |
virtio_net: verify if queue is broken after virtqueue_get_buf()
If a virtqueue_get_buf() call returns a NULL pointer a possibly endless while
loop should be avoided by checking for a broken virtqueue.
Signed-off-by: Heinz Graalfs <graalfs@linux.vnet.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/virtio_net.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index ff208d2787d3..057ea133cd2b 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
| @@ -825,7 +825,8 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd, | |||
| 825 | /* Spin for a response, the kick causes an ioport write, trapping | 825 | /* Spin for a response, the kick causes an ioport write, trapping |
| 826 | * into the hypervisor, so the request should be handled immediately. | 826 | * into the hypervisor, so the request should be handled immediately. |
| 827 | */ | 827 | */ |
| 828 | while (!virtqueue_get_buf(vi->cvq, &tmp)) | 828 | while (!virtqueue_get_buf(vi->cvq, &tmp) && |
| 829 | !virtqueue_is_broken(vi->cvq)) | ||
| 829 | cpu_relax(); | 830 | cpu_relax(); |
| 830 | 831 | ||
| 831 | return status == VIRTIO_NET_OK; | 832 | return status == VIRTIO_NET_OK; |
