Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'vfio-v5.13-rc5' of git://github.com/awilliam/linux-vfio

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()

+13 -7
+1
drivers/vfio/pci/Kconfig
··· 2 2 config VFIO_PCI 3 3 tristate "VFIO support for PCI devices" 4 4 depends on VFIO && PCI && EVENTFD 5 + depends on MMU 5 6 select VFIO_VIRQFD 6 7 select IRQ_BYPASS_MANAGER 7 8 help
+1 -1
drivers/vfio/pci/vfio_pci_config.c
··· 1581 1581 if (len == 0xFF) { 1582 1582 len = vfio_ext_cap_len(vdev, ecap, epos); 1583 1583 if (len < 0) 1584 - return ret; 1584 + return len; 1585 1585 } 1586 1586 } 1587 1587
+1 -1
drivers/vfio/platform/vfio_platform_common.c
··· 291 291 vfio_platform_regions_cleanup(vdev); 292 292 err_reg: 293 293 mutex_unlock(&driver_lock); 294 - module_put(THIS_MODULE); 294 + module_put(vdev->parent_module); 295 295 return ret; 296 296 } 297 297
+1 -1
drivers/vfio/vfio_iommu_type1.c
··· 2795 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 2800 cap_iovas = kzalloc(size, GFP_KERNEL); 2801 2801 if (!cap_iovas)
+9 -4
samples/vfio-mdev/mdpy-fb.c
··· 117 117 if (format != DRM_FORMAT_XRGB8888) { 118 118 pci_err(pdev, "format mismatch (0x%x != 0x%x)\n", 119 119 format, DRM_FORMAT_XRGB8888); 120 - return -EINVAL; 120 + ret = -EINVAL; 121 + goto err_release_regions; 121 122 } 122 123 if (width < 100 || width > 10000) { 123 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 128 if (height < 100 || height > 10000) { 127 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 133 pci_info(pdev, "mdpy found: %dx%d framebuffer\n", 131 134 width, height); 132 135 133 136 info = framebuffer_alloc(sizeof(struct mdpy_fb_par), &pdev->dev); 134 - if (!info) 137 + if (!info) { 138 + ret = -ENOMEM; 135 139 goto err_release_regions; 140 + } 136 141 pci_set_drvdata(pdev, info); 137 142 par = info->par; 138 143