]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
api.c: add precision to fscanf(), in cgroup_get_all_controller_next()
authorKamalesh Babulal <kamalesh.babulal@oracle.com>
Mon, 8 Aug 2022 16:36:16 +0000 (10:36 -0600)
committerTom Hromatka <tom.hromatka@oracle.com>
Mon, 8 Aug 2022 16:36:34 +0000 (10:36 -0600)
Fix calling risky function warning, reported by Coverity tool:

CID 258300 (#1 of 1): Calling risky function
(DC.STREAM_BUFFER)dont_call: fscanf assumes an arbitrarily long string,
so callers must use correct precision specifiers or never use fscanf.

As per secure coding standard, using '%s' in the fscanf() is not
recommend, hence fix it by using the precision of macro
MAX_CGROUP_TYPE_NAMELEN borrowed from Linux Kernel for the maximum
allowed controller/subsys_name length.

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

src/api.c

index 280eebf743e05f7dbbbaec86ff5c3428a8342275..6515142a4ec33f453082be27955890e9c76d4455 100644 (file)
--- a/src/api.c
+++ b/src/api.c
@@ -5487,7 +5487,11 @@ int cgroup_get_all_controller_next(void **handle, struct controller_data *info)
        if (!info)
                return ECGINVAL;
 
-       err = fscanf(proc_cgroup, "%s %d %d %d\n", subsys_name,
+       /*
+        * check Linux Kernel sources/kernel/cgroup/cgroup.c cgroup_init_early(),
+        * MAX_CGROUP_TYPE_NAMELEN check for details on why 32 is used.
+        */
+       err = fscanf(proc_cgroup, "%32s %d %d %d\n", subsys_name,
                        &hierarchy, &num_cgroups, &enabled);
 
        if (err != 4)