Commit 02e9e93
vhost_vdpa: assign irq bypass producer token correctly
We used to call irq_bypass_unregister_producer() in
vhost_vdpa_setup_vq_irq() which is problematic as we don't know if the
token pointer is still valid or not.
Actually, we use the eventfd_ctx as the token so the life cycle of the
token should be bound to the VHOST_SET_VRING_CALL instead of
vhost_vdpa_setup_vq_irq() which could be called by set_status().
Fixing this by setting up irq bypass producer's token when handling
VHOST_SET_VRING_CALL and un-registering the producer before calling
vhost_vring_ioctl() to prevent a possible use after free as eventfd
could have been released in vhost_vring_ioctl(). And such registering
and unregistering will only be done if DRIVER_OK is set.
Reported-by: Dragos Tatulea <dtatulea@nvidia.com>
Tested-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Fixes: 2cf1ba9 ("vhost_vdpa: implement IRQ offloading in vhost_vdpa")
Signed-off-by: Jason Wang <jasowang@redhat.com>
Message-Id: <20240816031900.18013-1-jasowang@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>1 parent dc12502 commit 02e9e93
1 file changed
Lines changed: 13 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
213 | 212 | | |
214 | 213 | | |
215 | 214 | | |
216 | | - | |
217 | 215 | | |
218 | 216 | | |
219 | 217 | | |
| |||
709 | 707 | | |
710 | 708 | | |
711 | 709 | | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
712 | 718 | | |
713 | 719 | | |
714 | 720 | | |
| |||
747 | 753 | | |
748 | 754 | | |
749 | 755 | | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
750 | 760 | | |
751 | 761 | | |
752 | 762 | | |
753 | 763 | | |
754 | 764 | | |
755 | 765 | | |
756 | | - | |
757 | 766 | | |
758 | 767 | | |
759 | 768 | | |
| |||
1419 | 1428 | | |
1420 | 1429 | | |
1421 | 1430 | | |
| 1431 | + | |
1422 | 1432 | | |
1423 | 1433 | | |
1424 | 1434 | | |
| |||
0 commit comments