[libvirt] [PATCH] trying to close some potential FILE * leaks

Daniel Veillard veillard at redhat.com
Fri Mar 13 17:20:21 UTC 2009


 While reviewing the code due to what seems to be a FILE * leak I
found the following problems, probably not what got me in troubles but
should still be fixed,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
Index: qemud/qemud.c
===================================================================
RCS file: /data/cvs/libxen/qemud/qemud.c,v
retrieving revision 1.146
diff -u -p -u -r1.146 qemud.c
--- qemud/qemud.c	3 Mar 2009 08:25:50 -0000	1.146
+++ qemud/qemud.c	13 Mar 2009 17:15:20 -0000
@@ -488,7 +488,7 @@ static int qemudWritePidFile(const char 
     if (fprintf(fh, "%lu\n", (unsigned long)getpid()) < 0) {
         VIR_ERROR(_("Failed to write to pid file '%s' : %s"),
                   pidFile, virStrerror(errno, ebuf, sizeof ebuf));
-        close(fd);
+        fclose(fh);
         return -1;
     }
 
Index: src/cgroup.c
===================================================================
RCS file: /data/cvs/libxen/src/cgroup.c,v
retrieving revision 1.9
diff -u -p -u -r1.9 cgroup.c
--- src/cgroup.c	6 Mar 2009 14:44:05 -0000	1.9
+++ src/cgroup.c	13 Mar 2009 17:15:21 -0000
@@ -57,7 +57,7 @@ void virCgroupFree(virCgroupPtr *group)
 
 static virCgroupPtr virCgroupGetMount(const char *controller)
 {
-    FILE *mounts;
+    FILE *mounts = NULL;
     struct mntent entry;
     char buf[CGROUP_MAX_VAL];
     virCgroupPtr root = NULL;
@@ -90,6 +90,8 @@ static virCgroupPtr virCgroupGetMount(co
 
     return root;
 err:
+    if (mounts != NULL)
+        fclose(mounts);
     virCgroupFree(&root);
 
     return NULL;
Index: src/uml_driver.c
===================================================================
RCS file: /data/cvs/libxen/src/uml_driver.c,v
retrieving revision 1.25
diff -u -p -u -r1.25 uml_driver.c
--- src/uml_driver.c	3 Mar 2009 09:14:28 -0000	1.25
+++ src/uml_driver.c	13 Mar 2009 17:15:21 -0000
@@ -546,6 +546,7 @@ reopen:
 
     if (fscanf(file, "%d", &vm->pid) != 1) {
         errno = EINVAL;
+        fclose(file);
         goto cleanup;
     }
 
@@ -1039,6 +1040,7 @@ static int umlGetProcessInfo(unsigned lo
 
     if (fscanf(pidinfo, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %llu %llu", &usertime, &systime) != 2) {
         umlDebug("not enough arg");
+        fclose(pidinfo);
         return -1;
     }
 
Index: src/util.c
===================================================================
RCS file: /data/cvs/libxen/src/util.c,v
retrieving revision 1.93
diff -u -p -u -r1.93 util.c
--- src/util.c	3 Mar 2009 12:03:44 -0000	1.93
+++ src/util.c	13 Mar 2009 17:15:21 -0000
@@ -1058,6 +1058,7 @@ int virFileReadPid(const char *dir,
 
     if (fscanf(file, "%d", pid) != 1) {
         rc = EINVAL;
+        fclose(file);
         goto cleanup;
     }
 


More information about the libvir-list mailing list