From 8e106e7a1a8d6cc3ea961f942dc36a2eae543904 Mon Sep 17 00:00:00 2001 From: Kamalesh Babulal Date: Sat, 4 Mar 2023 09:48:53 +0530 Subject: [PATCH] wrapper: fix segfault in cgroup_set_value_uint64() The second argument passed to cgroup_set_value_uint64() is of type char * and the user might pass NULL in the place of the argument, causing a segfault. The reason is, argument values are used without checks, fix it by checking for NULL pointers before proceeding. Reproducer: ----------- #include #include int main(void) { struct cgroup_controller *cgc; struct cgroup *cgrp; int ret; ret = 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_add_value_string(cgc, "cpu.shares", "512"); if (ret) exit (1); cgroup_set_value_uint64(cgc, NULL, 512); // should not reach here. return 0; } Signed-off-by: Kamalesh Babulal Signed-off-by: Tom Hromatka (cherry picked from commit afb6c6ab0ca1c7812bb8229c7054ba4917402f67) --- src/wrapper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wrapper.c b/src/wrapper.c index fc8ed181..a8b9a54f 100644 --- a/src/wrapper.c +++ b/src/wrapper.c @@ -552,7 +552,7 @@ int cgroup_set_value_uint64(struct cgroup_controller *controller, const char *na int ret; int i; - if (!controller) + if (!controller || !name) return ECGINVAL; for (i = 0; i < controller->index; i++) { -- 2.47.2