virtio-pci: fix use after free
Michael S. Tsirkin
maintainerPATCH 1/1 virtio-pci: fix use after free
Commit 31a3ddda166cda86d2b5111e09ba4bda5239fae6 introduced a use after free in virtio-pci. The main issue is that the release method signals removal of the virtio device, while remove signals removal of the pci device.
For example, on driver removal or hot-unplug, virtio_pci_release_dev is called before virtio_pci_remove. We then might get a crash as virtio_pci_remove tries to use the device freed by virtio_pci_release_dev.
We allocate/free all resources together with the pci device, so we can leave the release method empty.
--- drivers/virtio/virtio_pci.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-)
drivers/virtio/virtio_pci.c +6 -5
@@ -730,11 +730,11 @@ static struct virtio_config_ops virtio_pci_config_ops = {static void virtio_pci_release_dev (struct device *_d) { - struct virtio_device *dev = container_of(_d, struct virtio_device, - dev); -struct virtio_pci_device *vp_dev =to_vp_device (dev); - -kfree (vp_dev); +/* +* No need for a release method as we allocate/free +* all devices together with the pci devices. +* Provide an empty one to avoid getting a warning from core. +*/ }/* the PCI probing function */
@@ -822,6 +822,7 @@ static void __devexit virtio_pci_remove(struct pci_dev *pci_dev)virtio_pci_iounmap (vp_dev);pci_release_regions (pci_dev);pci_disable_device (pci_dev); +kfree (vp_dev); }#ifdef CONFIG_PM
Signature · 1 line
1.7.5.53.gc233e
Rusty Russell
AppliedQuoted 10 lines · Michael S. Tsirkin
Commit
31a3ddda166cda86d2b5111e09ba4bda5239fae6introduced a use after free in virtio-pci. The main issue is that the release method signals removal of the virtio device, while remove signals removal of the pci device.For example, on driver removal or hot-unplug,
virtio_pci_release_devis called beforevirtio_pci_remove. We then might get a crash asvirtio_pci_removetries to use the device freed byvirtio_pci_release_dev.
Quoted 4 lines
We allocate/free all resources together with the pci device, so we can leave the release method empty.
Signed-off-by Michael S. Tsirkin <[email protected]>
Applied, thanks. Will push once it's spent a day in linux-next.
Thanks,
Rusty.
Quoted 10 lines · Michael S. Tsirkin
Commit
31a3ddda166cda86d2b5111e09ba4bda5239fae6introduced a use after free in virtio-pci. The main issue is that the release method signals removal of the virtio device, while remove signals removal of the pci device.For example, on driver removal or hot-unplug,
virtio_pci_release_devis called beforevirtio_pci_remove. We then might get a crash asvirtio_pci_removetries to use the device freed byvirtio_pci_release_dev.
Quoted 4 lines
We allocate/free all resources together with the pci device, so we can leave the release method empty.
Signed-off-by Michael S. Tsirkin <[email protected]>
(note: Adding CC: [email protected] to the commit log is the way patches get automatically pulled from upstream when committed; CC'ing stable on submissions won't help with that.)
Amit
Quoted 14 lines · Amit Shah
Quoted 13 lines · Michael S. Tsirkin
Commit
31a3ddda166cda86d2b5111e09ba4bda5239fae6introduced a use after free in virtio-pci. The main issue is that the release method signals removal of the virtio device, while remove signals removal of the pci device.For example, on driver removal or hot-unplug,
virtio_pci_release_devis called beforevirtio_pci_remove. We then might get a crash asvirtio_pci_removetries to use the device freed byvirtio_pci_release_dev.We allocate/free all resources together with the pci device, so we can leave the release method empty.
Quoted 7 lines
Quoted 1 line
Signed-off-by Michael S. Tsirkin <[email protected]>Acked-by Amit Shah <[email protected]>(note: Adding CC: [email protected] to the commit log is the way patches get automatically pulled from upstream when committed; CC'ing stable on submissions won't help with that.)
Yeah, I fixed it though.
Cheers,
Rusty.