]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
libcgroup: Fixed leaked file descriptor when enumerating controllers
authorJan Safranek <jsafrane@redhat.com>
Wed, 24 Aug 2011 09:40:42 +0000 (11:40 +0200)
committerJan Safranek <jsafrane@redhat.com>
Wed, 14 Sep 2011 11:22:38 +0000 (13:22 +0200)
Close the file when fgets fails.

Signed-off-by: Jan Safranek <jsafrane@redhat.com>
Acked-by: Dhaval Giani <dhaval.giani@gmail.com>
src/api.c

index 0acf7876d61eb758d407e4f0621a6ce8162b4568..5b2b518d196ca2c71c9d0e14d77b6d35b0f21ea0 100644 (file)
--- a/src/api.c
+++ b/src/api.c
@@ -3822,6 +3822,7 @@ int cgroup_get_all_controller_begin(void **handle, struct controller_data *info)
 {
        FILE *proc_cgroup = NULL;
        char buf[FILENAME_MAX];
+       int ret;
 
        if (!info)
                return ECGINVAL;
@@ -3834,11 +3835,18 @@ int cgroup_get_all_controller_begin(void **handle, struct controller_data *info)
 
        if (!fgets(buf, FILENAME_MAX, proc_cgroup)) {
                last_errno = errno;
+               fclose(proc_cgroup);
+               *handle = NULL;
                return ECGOTHER;
        }
        *handle = proc_cgroup;
 
-       return cgroup_get_all_controller_next(handle, info);
+       ret = cgroup_get_all_controller_next(handle, info);
+       if (ret != 0) {
+               fclose(proc_cgroup);
+               *handle = NULL;
+       }
+       return ret;
 }
 
 static int pid_compare(const void *a, const void *b)