]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
wrapper: fix segfault in cgroup_set_value_string()
authorKamalesh Babulal <kamalesh.babulal@oracle.com>
Mon, 20 Feb 2023 15:09:07 +0000 (15:09 +0000)
committerTom Hromatka <tom.hromatka@oracle.com>
Wed, 22 Feb 2023 16:43:53 +0000 (09:43 -0700)
The second and third arguments passed to cgroup_set_value_string() are
of type char * and the user might pass NULL in place of one or both of
the arguments, causing a segfault.  segfault is trigger when the NULL,
argument values are used without checks, fix it by checking for NULL
before proceeding.

Reproducer:
-----------

int main(void)
{
        struct cgroup_controller *cgc;
        struct cgroup *cgrp;

        cgroup_init();
        if (ret)
exit(1);

        cgrp = cgroup_new_cgroup("fuzzer");
        if (!cgrp)
                exit(1);

        cgc = cgroup_add_controller(cgrp, "cpu");
        if (!cgc)
exit(1);

        ret = cgroup_create_cgroup(cgrp, 1);
        if (ret)
exit(1);

        cgroup_set_value_string(cgc, NULL, NULL);

// should not reach here.
return 0;
}

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

src/wrapper.c

index 0e7241161df8276680fdd2a79e85946421469284..dc6dd9363bb76bd95d924ca717358968c67d86a9 100644 (file)
@@ -462,7 +462,7 @@ int cgroup_set_value_string(struct cgroup_controller *controller, const char *na
 {
        int i;
 
-       if (!controller)
+       if (!controller || !name || !value)
                return ECGINVAL;
 
        for (i = 0; i < controller->index; i++) {