diff options
author | Xi Xiong <xixiong@amazon.com> | 2013-08-30 12:21:56 -0700 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-09-03 16:36:52 +0100 |
commit | 749019afca4fd002d36856bad002cc11f7d0ddda (patch) | |
tree | 5d469a64e0c33f629202a7c9716d1decca8e5f9c /tools/python | |
parent | 1893cf77992cc0ce9d827a8d345437fa2494b540 (diff) | |
download | xen-749019afca4fd002d36856bad002cc11f7d0ddda.tar.gz xen-749019afca4fd002d36856bad002cc11f7d0ddda.tar.bz2 xen-749019afca4fd002d36856bad002cc11f7d0ddda.zip |
xend: fix file descriptor leak in pci utilities
A file descriptor leak was detected after creating multiple domUs with
pass-through PCI devices. This patch fixes the issue.
Signed-off-by: Xi Xiong <xixiong@amazon.com>
Reviewed-by: Matt Wilson <msw@amazon.com>
[msw: adjusted commit message]
Signed-off-by: Matt Wilson <msw@amazon.com>
Diffstat (limited to 'tools/python')
-rw-r--r-- | tools/python/xen/util/pci.py | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/tools/python/xen/util/pci.py b/tools/python/xen/util/pci.py index 307144ce31..adeca4bbf9 100644 --- a/tools/python/xen/util/pci.py +++ b/tools/python/xen/util/pci.py @@ -969,18 +969,22 @@ class PciDevice: ttl = 480; # 3840 bytes, minimum 8 bytes per capability pos = 0x100 + fd = None try: fd = os.open(path, os.O_RDONLY) os.lseek(fd, pos, 0) h = os.read(fd, 4) if len(h) == 0: # MMCONF is not enabled? + os.close(fd) return 0 header = struct.unpack('I', h)[0] if header == 0 or header == -1: + os.close(fd) return 0 while ttl > 0: if (header & 0x0000ffff) == cap: + os.close(fd) return pos pos = (header >> 20) & 0xffc if pos < 0x100: @@ -990,6 +994,8 @@ class PciDevice: ttl = ttl - 1 os.close(fd) except OSError, (errno, strerr): + if fd is not None: + os.close(fd) raise PciDeviceParseError(('Error when accessing sysfs: %s (%d)' % (strerr, errno))) return 0 |