]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
tools/cgget: fix segfault in get_cv_value()
authorKamalesh Babulal <kamalesh.babulal@oracle.com>
Mon, 19 Sep 2022 13:54:51 +0000 (07:54 -0600)
committerTom Hromatka <tom.hromatka@oracle.com>
Mon, 19 Sep 2022 13:54:55 +0000 (07:54 -0600)
cgget segfaulted on v2.0.2 branch, with:
cgget: cannot find controller 'incal' in group '016cgget'
Fatal error: glibc detected an invalid stdio handle
Aborted (core dumped)

It was caught by ftests/016-cgget-invalid_options.py on Ubuntu 22.04, a
simple reproducer on the v2.0.2 branch:
$ sudo ./src/tools/cgget -n -v -r invalid.setting 016cgget
assuming 016cgget cgroup exists.

It is due to the invalid controller name passed to the
cgroup_read_value_begin(), which returns failure and callee
get_cv_value() in the error clean up path, does a fclose(handle).
If (handle != NULL) succeeds because its uninitialized and has some
garbage value. Fix this by initializing the handle to NULL.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit c8af263a8802b48a3fdc0de68e6408d72619e172)

src/tools/cgget.c

index 4294980819be00e0db66d9ed6908be4a95d4de01..bcbe63ccda19aa5b031886180f00bf0e97d926f1 100644 (file)
@@ -461,8 +461,8 @@ static int get_cv_value(struct control_value * const cv,
                        const char * const controller_name)
 {
        bool is_multiline = false;
+       void *tmp, *handle = NULL;
        char tmp_line[LL_MAX];
-       void *handle, *tmp;
        int ret;
 
        ret = cgroup_read_value_begin(controller_name, cg_name, cv->name,