Pull VFIO fixes from Alex Williamson: - Fix error path return value (Zhen Lei) - Add vfio-pci CONFIG_MMU dependency (Randy Dunlap) - Replace open coding with struct_size() (Gustavo A. R. Silva) - Fix sample driver error path (Wei Yongjun) - Fix vfio-platform error path module_put() (Max Gurtovoy) * tag 'vfio-v5.13-rc5' of git://github.com/awilliam/linux-vfio: vfio/platform: fix module_put call in error flow samples: vfio-mdev: fix error handing in mdpy_fb_probe() vfio/iommu_type1: Use struct_size() for kzalloc() vfio/pci: zap_vma_ptes() needs MMU vfio/pci: Fix error return code in vfio_ecap_init()
Unified · Split
| @@ -2,6 +2,7 @@ · 1 unmodified line | |||
| 2 | config VFIO_PCI | 2 | config VFIO_PCI |
| 3 | tristate "VFIO support for PCI devices" | 3 | tristate "VFIO support for PCI devices" |
| 4 | depends on VFIO && PCI && EVENTFD | 4 | depends on VFIO && PCI && EVENTFD |
| 5 | depends on MMU | ||
| 5 | select VFIO_VIRQFD | 6 | select VFIO_VIRQFD |
| 6 | select IRQ_BYPASS_MANAGER | 7 | select IRQ_BYPASS_MANAGER |
| 7 | help | 8 | help |
| @@ -1581,7 +1581,7 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev) · 1580 unmodified lines | |||
| 1581 | if (len == 0xFF) { | 1581 | if (len == 0xFF) { |
| 1582 | len = vfio_ext_cap_len(vdev, ecap, epos); | 1582 | len = vfio_ext_cap_len(vdev, ecap, epos); |
| 1583 | if (len < 0) | 1583 | if (len < 0) |
| 1584 | return ret; | 1584 | return len; |
| 1585 | } | 1585 | } |
| 1586 | } | 1586 | } |
| 1587 | 1587 | ||
| @@ -291,7 +291,7 @@ err_irq: · 290 unmodified lines | |||
| 291 | vfio_platform_regions_cleanup(vdev); | 291 | vfio_platform_regions_cleanup(vdev); |
| 292 | err_reg: | 292 | err_reg: |
| 293 | mutex_unlock(&driver_lock); | 293 | mutex_unlock(&driver_lock); |
| 294 | module_put(THIS_MODULE); | 294 | module_put(vdev->parent_module); |
| 295 | return ret; | 295 | return ret; |
| 296 | } | 296 | } |
| 297 | 297 | ||
| @@ -2795,7 +2795,7 @@ static int vfio_iommu_iova_build_caps(struct vfio_iommu *iommu, · 2794 unmodified lines | |||
| 2795 | return 0; | 2795 | return 0; |
| 2796 | } | 2796 | } |
| 2797 | 2797 | ||
| 2798 | size = sizeof(*cap_iovas) + (iovas * sizeof(*cap_iovas->iova_ranges)); | 2798 | size = struct_size(cap_iovas, iova_ranges, iovas); |
| 2799 | 2799 | ||
| 2800 | cap_iovas = kzalloc(size, GFP_KERNEL); | 2800 | cap_iovas = kzalloc(size, GFP_KERNEL); |
| 2801 | if (!cap_iovas) | 2801 | if (!cap_iovas) |
| @@ -117,22 +117,27 @@ static int mdpy_fb_probe(struct pci_dev *pdev, · 116 unmodified lines | |||
| 117 | if (format != DRM_FORMAT_XRGB8888) { | 117 | if (format != DRM_FORMAT_XRGB8888) { |
| 118 | pci_err(pdev, "format mismatch (0x%x != 0x%x)\n", | 118 | pci_err(pdev, "format mismatch (0x%x != 0x%x)\n", |
| 119 | format, DRM_FORMAT_XRGB8888); | 119 | format, DRM_FORMAT_XRGB8888); |
| 120 | return -EINVAL; | 120 | ret = -EINVAL; |
| 121 | goto err_release_regions; | ||
| 121 | } | 122 | } |
| 122 | if (width < 100 || width > 10000) { | 123 | if (width < 100 || width > 10000) { |
| 123 | pci_err(pdev, "width (%d) out of range\n", width); | 124 | pci_err(pdev, "width (%d) out of range\n", width); |
| 124 | return -EINVAL; | 125 | ret = -EINVAL; |
| 126 | goto err_release_regions; | ||
| 125 | } | 127 | } |
| 126 | if (height < 100 || height > 10000) { | 128 | if (height < 100 || height > 10000) { |
| 127 | pci_err(pdev, "height (%d) out of range\n", height); | 129 | pci_err(pdev, "height (%d) out of range\n", height); |
| 128 | return -EINVAL; | 130 | ret = -EINVAL; |
| 131 | goto err_release_regions; | ||
| 129 | } | 132 | } |
| 130 | pci_info(pdev, "mdpy found: %dx%d framebuffer\n", | 133 | pci_info(pdev, "mdpy found: %dx%d framebuffer\n", |
| 131 | width, height); | 134 | width, height); |
| 132 | 135 | ||
| 133 | info = framebuffer_alloc(sizeof(struct mdpy_fb_par), &pdev->dev); | 136 | info = framebuffer_alloc(sizeof(struct mdpy_fb_par), &pdev->dev); |
| 134 | if (!info) | 137 | if (!info) { |
| 138 | ret = -ENOMEM; | ||
| 135 | goto err_release_regions; | 139 | goto err_release_regions; |
| 140 | } | ||
| 136 | pci_set_drvdata(pdev, info); | 141 | pci_set_drvdata(pdev, info); |
| 137 | par = info->par; | 142 | par = info->par; |
| 138 | 143 | ||