diff --git a/src/openvz_conf.c b/src/openvz_conf.c
index 2f0471c..ce4fc6e 100644
--- a/src/openvz_conf.c
+++ b/src/openvz_conf.c
@@ -821,8 +821,10 @@ openvzGetVPSUUID(int vpsid, char *uuidstr, size_t len)
 
     while(1) {
         ret = openvz_readline(fd, line, sizeof(line));
-        if(ret == -1)
+        if(ret == -1) {
+            close(fd);
             return -1;
+        }
 
         if(ret == 0) { /* EoF, UUID was not found */
             uuidstr[0] = 0;
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 2a8e6d1..f64d70b 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -2837,6 +2837,7 @@ static int qemudGetProcessInfo(unsigned long long *cpuTime, int *lastCpu, int pi
                /* startstack -> processor */
                "%*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*d %d",
                &usertime, &systime, &cpu) != 3) {
+        fclose(pidinfo);
         VIR_WARN0("cannot parse process status data");
         errno = -EINVAL;
         return -1;
diff --git a/src/storage_backend_scsi.c b/src/storage_backend_scsi.c
index 1d2378b..a09103f 100644
--- a/src/storage_backend_scsi.c
+++ b/src/storage_backend_scsi.c
@@ -137,7 +137,7 @@ virStorageBackendSCSIUpdateVolTargetInfo(virConnectPtr conn,
                                          unsigned long long *allocation,
                                          unsigned long long *capacity)
 {
-    int fd, i;
+    int fd, i, ret = -1;
     off_t start;
     unsigned char buffer[1024];
     ssize_t bytes;
@@ -154,7 +154,7 @@ virStorageBackendSCSIUpdateVolTargetInfo(virConnectPtr conn,
                                                fd,
                                                allocation,
                                                capacity) < 0)
-        return -1;
+        goto cleanup;
 
     /* make sure to set the target format "unknown" to begin with */
     target->format = VIR_STORAGE_POOL_DISK_UNKNOWN;
@@ -164,14 +164,14 @@ virStorageBackendSCSIUpdateVolTargetInfo(virConnectPtr conn,
         virReportSystemError(conn, errno,
                              _("cannot seek to beginning of file '%s'"),
                              target->path);
-        return -1;
+        goto cleanup;
     }
     bytes = saferead(fd, buffer, sizeof(buffer));
     if (bytes < 0) {
         virReportSystemError(conn, errno,
                              _("cannot read beginning of file '%s'"),
                              target->path);
-        return -1;
+        goto cleanup;
     }
 
     for (i = 0; disk_types[i].part_table_type != -1; i++) {
@@ -184,7 +184,12 @@ virStorageBackendSCSIUpdateVolTargetInfo(virConnectPtr conn,
         }
     }
 
-    return 0;
+    ret = 0;
+
+  cleanup:
+    close(fd);
+
+    return ret;
 }
 
 static int
diff --git a/src/xen_inotify.c b/src/xen_inotify.c
index f4716ca..e312b9e 100644
--- a/src/xen_inotify.c
+++ b/src/xen_inotify.c
@@ -424,6 +424,7 @@ xenInotifyOpen(virConnectPtr conn ATTRIBUTE_UNUSED,
             if (xenInotifyAddDomainConfigInfo(conn, path) < 0 ) {
                 virXenInotifyError(NULL, VIR_ERR_INTERNAL_ERROR,
                                    "%s", _("Error adding file to config list"));
+                closedir(dh);
                 return -1;
             }
         }
