From 77f021bccf5e31acd7b15437c85e174e8b1e2dcf Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Wed, 24 Aug 2011 11:40:42 +0200 Subject: [PATCH] libcgroup: Fixed leaked file descriptor when enumerating controllers Close the file when fgets fails. Signed-off-by: Jan Safranek Acked-by: Dhaval Giani --- src/api.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/api.c b/src/api.c index 0acf7876..5b2b518d 100644 --- 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) -- 2.47.3