qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag


From: Chen, Tiejun
Subject: Re: [Qemu-devel] [PULL 0/19] xen-2015-09-08-tag
Date: Wed, 16 Sep 2015 09:11:20 +0800
User-agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0

On 9/15/2015 7:00 PM, Paolo Bonzini wrote:


On 15/09/2015 11:55, Stefano Stabellini wrote:
On Mon, 14 Sep 2015, Paolo Bonzini wrote:
> On 10/09/2015 12:29, Stefano Stabellini wrote:
> > +    if (lseek(config_fd, pos, SEEK_SET) != pos) {
> > +        return -errno;
> > +    }
> >      do {
> > -        rc = pread(config_fd, (uint8_t *)&val, len, pos);
> > +        rc = read(config_fd, (uint8_t *)&val, len);
> >      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
>
> This leaks config_fd.
I don't follow, it leaks config_fd where?

Where lseek returns -errno (and IIRC in other places in the same function).

Do you mean we need this change?

diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 1fb71c8..7d44228 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -775,15 +775,18 @@ static int host_pci_config_read(int pos, int len, uint32_t val)
     }

     if (lseek(config_fd, pos, SEEK_SET) != pos) {
+        close(config_fd);
         return -errno;
     }
     do {
         rc = read(config_fd, (uint8_t *)&val, len);
     } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
     if (rc != len) {
+        close(config_fd);
         return -errno;
     }

+    close(config_fd);
     return 0;
 }


Thanks
Tiejun



reply via email to

[Prev in Thread] Current Thread [Next in Thread]