Re: [PATCH v2] device-assignment: Better fd tracking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Alex Williamson wrote:
> Commit 909bfdba fixed a hole with not closing resource file descriptors
> but we need to be more careful about tracking which are real fds,
> otherwise we might close fd 0, which doesn't work out so well for stdio.
> 
> Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx>
> ---
> 
>  v2: fix qemu style braces
> 
>  hw/device-assignment.c |   10 ++++++----
>  1 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/device-assignment.c b/hw/device-assignment.c
> index 48ac73c..de9470c 100644
> --- a/hw/device-assignment.c
> +++ b/hw/device-assignment.c
> @@ -694,6 +694,7 @@ again:
>  
>          rp = dev->regions + r;
>          rp->valid = 0;
> +        rp->resource_fd = -1;
>          size = end - start + 1;
>          flags &= IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH;
>          if (size == 0 || (flags & ~IORESOURCE_PREFETCH) == 0)
> @@ -785,7 +786,9 @@ static void free_assigned_device(AssignedDevice *dev)
>                          fprintf(stderr,
>  				"Failed to unmap assigned device region: %s\n",
>  				strerror(errno));
> -                    close(pci_region->resource_fd);
> +                    if (pci_region->resource_fd >= 0) {
> +                        close(pci_region->resource_fd);
> +                    }
>                  }
>  	    }
>          }
> @@ -793,9 +796,8 @@ static void free_assigned_device(AssignedDevice *dev)
>          if (dev->cap.available & ASSIGNED_DEVICE_CAP_MSIX)
>              assigned_dev_unregister_msix_mmio(dev);
>  
> -        if (dev->real_device.config_fd) {
> +        if (dev->real_device.config_fd >= 0) {
>              close(dev->real_device.config_fd);
> -            dev->real_device.config_fd = 0;
>          }
>  
>  #ifdef KVM_CAP_IRQ_ROUTING
> @@ -1415,7 +1417,7 @@ static int assigned_initfn(struct PCIDevice *pci_dev)
>  
>      if (!dev->host.seg && !dev->host.bus && !dev->host.dev && !dev->host.func) {
>          error_report("pci-assign: error: no host device specified");
> -        goto out;
> +        return -1;
>      }
>  
>      if (get_real_device(dev, dev->host.seg, dev->host.bus,
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

thanks for reply on other if check's.

Acked-by: Donald Dutile <ddutile@xxxxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux