commit d0ea3a543b13defbcf321da5e136fb896652b697
Author: Gautam Dawar <gdawar@xilinx.com>
Date:   Thu Feb 18 20:38:46 2021 +0530

    vhost vdpa: fix the irq check for invoking irq_bypass_unregister_producer
    
    When qemu with vhost-vdpa netdevice is run for the first time, it works well.
    But after the VM is powered off, next qemu run causes kernel panic due to a
    NULL pointer dereference in irq_bypass_register_producer().
    
    When the VM is powered off, vhost_vdpa_clean_irq() misses on calling
    irq_bypass_unregister_producer() for irq 0 because of existing check.
    
    This leaves stale producer nodes, which are reset in vhost_vring_call_reset()
    when vhost_dev_init() is invoked during second qemu run.
    
    As the node member of struct irq_bypass_producer is also initialized
    to zero, traversal on the producers list causes crash due to NULL pointer
    dereference.
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=211711
    Signed-off-by: Gautam Dawar <gdawar@xilinx.com>

diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
index 62a9bb0efc55..d1c3a33c6239 100644
--- a/drivers/vhost/vdpa.c
+++ b/drivers/vhost/vdpa.c
@@ -849,7 +849,7 @@ static void vhost_vdpa_clean_irq(struct vhost_vdpa *v)
 
 	for (i = 0; i < v->nvqs; i++) {
 		vq = &v->vqs[i];
-		if (vq->call_ctx.producer.irq)
+		if (vq->call_ctx.producer.irq >= 0)
 			irq_bypass_unregister_producer(&vq->call_ctx.producer);
 	}
 }
