Module Name:    xsrc
Committed By:   christos
Date:           Fri Sep 21 18:33:08 UTC 2018

Modified Files:
        xsrc/external/mit/libdrm/dist: xf86drm.c

Log Message:
- don't return random values to the caller
- don't leak fd's.


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 xsrc/external/mit/libdrm/dist/xf86drm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: xsrc/external/mit/libdrm/dist/xf86drm.c
diff -u xsrc/external/mit/libdrm/dist/xf86drm.c:1.20 xsrc/external/mit/libdrm/dist/xf86drm.c:1.21
--- xsrc/external/mit/libdrm/dist/xf86drm.c:1.20	Sat Sep  8 23:58:37 2018
+++ xsrc/external/mit/libdrm/dist/xf86drm.c	Fri Sep 21 14:33:08 2018
@@ -3347,22 +3347,29 @@ static int drmParsePciDeviceInfo(int maj
     if ((pcifd = open(fname, O_RDONLY)) == -1)
 	return -errno;
 
+    ret = -1;
     /* Read the id and class pci config registers.  */
     if (pcibus_conf_read(pcifd, businfo.bus, businfo.dev, businfo.func,
 	    PCI_ID_REG, &id) == -1)
-	return -errno;
+	goto out;
     if (pcibus_conf_read(pcifd, businfo.bus, businfo.dev, businfo.func,
 	    PCI_CLASS_REG, &class) == -1)
-	return -errno;
+	goto out;
     if (pcibus_conf_read(pcifd, businfo.bus, businfo.dev, businfo.func,
 	    PCI_SUBSYS_ID_REG, &subsys) == -1)
-	return -errno;
+	goto out;
 
+    ret = 0;
     device->vendor_id = PCI_VENDOR(id);
     device->device_id = PCI_PRODUCT(id);
     device->subvendor_id = PCI_SUBSYS_VENDOR(subsys);
     device->subdevice_id = PCI_SUBSYS_ID(subsys);
     device->revision_id = PCI_REVISION(class);
+out:
+    if (ret == -1)
+	ret = -errno;
+    close(pcifd);
+    return ret;
 #elif defined(__OpenBSD__)
     struct drm_pciinfo pinfo;
     int fd, type;

Reply via email to