]> git.ipfire.org Git - thirdparty/libcgroup.git/log
thirdparty/libcgroup.git
2 years agoapi.c: use /proc/self/mounts
Kamalesh Babulal [Wed, 31 Aug 2022 21:03:34 +0000 (15:03 -0600)] 
api.c: use /proc/self/mounts

Use /proc/self/mount instead of /proc/mounts, which is a symbolic link
to the former. The symbolic link creation can be traced back to Linux
Kernel commit 59c7572e82d6 ("proc: remove fs/proc/proc_misc.c"). Also,
the /proc/mounts are not available in the cases where the /proc is
mounted with subset=pid option.

As per kernel docs filesystems/procs.rst:
"subset=pid hides all top level files and directories in the procfs that
are not related to tasks."

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoconfigure: remove AM_COND for --disable-tests
Kamalesh Babulal [Wed, 31 Aug 2022 20:26:15 +0000 (14:26 -0600)] 
configure: remove AM_COND for --disable-tests

With the usage of DIST_SUBDIRS, the makefiles for the tests/* will be
generated, and building the tests/* should be controlled using SUBDIRS.
Remove the AM_COND condition for --disable-tests in the AC_CONFIG_FILES
list.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agomake: use DIST_SUBDIRS
Kamalesh Babulal [Wed, 31 Aug 2022 20:25:48 +0000 (14:25 -0600)] 
make: use DIST_SUBDIRS

As per automake manual[1], DIST_SUBDIRS should be used to recurse into
the subdirectories those we want to ship as part of make dist and use
SUBDIRS for conditionally building the directories. Adopt this rule
across the source.

[1] https://www.gnu.org/software/automake/manual/html_node/SUBDIRS-vs-DIST_005fSUBDIRS.html

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agogithub/workflows: add support for testing different cgroup setups
Kamalesh Babulal [Wed, 31 Aug 2022 14:25:16 +0000 (08:25 -0600)] 
github/workflows: add support for testing different cgroup setups

Add support to run the Github workflow on three parallel runners, each
of them have a unique cgroup setup:
cgroup v1 only (legacy), cgroup v1/v2 (hybrid), cgroup v2 only (unified).

With this change, we should be able to run every patch against all
combination of cgroup setups.

Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
TJH: Remove the clean logic and instead use the Github Actions
$ACTIONS_RUNNER_HOOK_JOB_STARTED environment variable

2 years agoapi.c: fix file open in cg_chmod_path()
Kamalesh Babulal [Mon, 29 Aug 2022 21:01:47 +0000 (15:01 -0600)] 
api.c: fix file open in cg_chmod_path()

In cg_chmod_path(), the commit 8b9665c29cb8 ("api.c: fix TOCTOU in
cg_chmod_path()), converted the file operations from stat -> fstat and
chmod -> fchmod to fix a Coverity warning.  The newly replaced file
operations operate on file descriptors and hence introduced a side
effect of opening the file at the wrong code block, that would only work
as expected when the caller calls cg_chmod_path() with owner_is_umask
set.

Fix it by moving the file operation out of the conditional block, so it
works in both of the cases of owner_is_umask being set or unset.

Fixes: 8b9665c29cb8 ("api.c: fix TOCTOU in cg_chmod_path())
Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoapi.c: fix TOCTOU in cg_chmod_path()
Kamalesh Babulal [Wed, 24 Aug 2022 18:44:47 +0000 (12:44 -0600)] 
api.c: fix TOCTOU in cg_chmod_path()

Fix TOCTOU warning, reported by Coverity Tool:

CID 258267 (#1 of 1): Time of check time of use (TOCTOU).
fs_check_call: Calling function stat to perform check on path.

in cg_chmod_path(), the file name is stat() and not immediately followed
by the file operation. One way to fix it, open the file and use the file
descriptor to manipulate the file.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agotools/tools-common.h: introduce CGROUP_LOG_CONT level for logging
Kamalesh Babulal [Tue, 23 Aug 2022 17:22:04 +0000 (11:22 -0600)] 
tools/tools-common.h: introduce CGROUP_LOG_CONT level for logging

There are cases, where we might want to print a very long/multiline log
message to the user. We could call the cgroup_log(), multiple times
to fit the log message, but the downside is that every time the
cgroup_log() called, the log level is prefixed to the message, hence
introducing loglevel char string in the mid of the log message.

Introduce a new logging level, CGROUP_LOG_CONT and cgroup_cont() macro,
that will continue printing the log message, when loglevel is set to
other than default log level. The above code can be rewritten as:

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
TJH: Fix typo in commit message

2 years agolog: introduce CGROUP_LOG_CONT level for logging
Kamalesh Babulal [Tue, 23 Aug 2022 17:21:47 +0000 (11:21 -0600)] 
log: introduce CGROUP_LOG_CONT level for logging

There are cases, where we might want to print a very long/multiline log
message to the user. We could call the cgroup_log(), multiple times to
fit the log message, but the downside is that every time the
cgroup_log() called, the log level is prefixed to the message, hence
introducing loglevel char string in the mid of the log message.
For example, calling the cgroup_warn() twice to print a long warning:

cgroup_warn("cgroup v1 expects /proc/cgroup, check if ");
cgroup_warn("/proc mounted with subset=pid option\n");

output:
-------
$ sudo CGROUP_LOGLEVEL=DEBUG ./src/tools/cgget -g cpu:user.slice
...
Warning: cgroup v1 expects /proc/cgroup, check if Warning: /proc mounted
with subset=pid option

Introduce a new logging level, CGROUP_LOG_CONT and cgroup_cont() macro,
that will continue printing the log message, when loglevel is set to other
than default log level. The above code can be rewritten as:

cgroup_warn("cgroup v1 expects/proc/cgroup, check if ");
cgroup_cont("/proc mounted with subset=pid option\n");

output:
-------
$ sudo CGROUP_LOGLEVEL=DEBUG ./src/tools/cgget -g cpu:user.slice
...
Warning: cgroup v1 expects /proc/cgroup, check if /proc mounted with
subset=pid option

Also, make comsetic changes to cgroup_*().

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agodaemon/cgrulesengd: check the bytes read in cgre_receive_unix_domain_msg()
Kamalesh Babulal [Wed, 10 Aug 2022 17:08:26 +0000 (11:08 -0600)] 
daemon/cgrulesengd: check the bytes read in cgre_receive_unix_domain_msg()

Fix ignoring the number of bytes read, warning reported by Coverity
tool:

CID 258286 (#1 of 1): Ignoring number of bytes read (CHECKED_RETURN).
check_return: read(int, void *, size_t) returns the number of bytes
read, but it is ignored.

In cgre_receive_unix_domain_msg(), the number of bytes read() is
ignored, while reading from the flag value of the pid. Coverity warns on
not checking the number of bytes read, fix it.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoapi.c: add precision to fscanf(), in cgroup_get_current_controller_path()
Kamalesh Babulal [Wed, 10 Aug 2022 16:52:09 +0000 (10:52 -0600)] 
api.c: add precision to fscanf(), in cgroup_get_current_controller_path()

Fix calling risky function warning, reported by Coverity tool:

CID 258301 (#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
FILENAME_MAX 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>
TJH: Small fix in the commit comment.

2 years agoapi.c: add precision to fscanf(), in cgroup_populate_controllers()
Kamalesh Babulal [Mon, 8 Aug 2022 16:59:52 +0000 (10:59 -0600)] 
api.c: add precision to fscanf(), in cgroup_populate_controllers()

Fix calling risky function warning, reported by Coverity tool:

CID 258305 (#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>
2 years agoapi.c: add precision to fscanf(), in cgroup_get_all_controller_next()
Kamalesh Babulal [Mon, 8 Aug 2022 16:33:42 +0000 (10:33 -0600)] 
api.c: add precision to fscanf(), in cgroup_get_all_controller_next()

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>
3 years agodoc: Update the github release process
Tom Hromatka [Thu, 4 Aug 2022 19:48:32 +0000 (13:48 -0600)] 
doc: Update the github release process

Add a step to update the libcgroup-tests submodule

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotests: Update submodule to the latest commit on libcgroup-tests main branch
Tom Hromatka [Thu, 4 Aug 2022 19:33:02 +0000 (13:33 -0600)] 
tests: Update submodule to the latest commit on libcgroup-tests main branch

For future reference, here are the steps to do this:
$ ./bootstrap.sh
$ git submodule update  --remote tests
$ git add tests

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoMerge pull request #220 from drakenclimber/add-cgx-man-pages
Tom Hromatka [Thu, 4 Aug 2022 19:24:51 +0000 (13:24 -0600)] 
Merge pull request #220 from drakenclimber/add-cgx-man-pages

Add man pages for cgxget and cgxset

3 years agoman/cgxset: add man page for cgxset 220/head
Tom Hromatka [Wed, 3 Aug 2022 19:49:02 +0000 (13:49 -0600)] 
man/cgxset: add man page for cgxset

Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoman/cgxget: add man page for cgxget
Tom Hromatka [Wed, 3 Aug 2022 19:33:18 +0000 (13:33 -0600)] 
man/cgxget: add man page for cgxget

Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: de-allocate cg_convert_list[] in convert_cgroup()
Kamalesh Babulal [Thu, 4 Aug 2022 18:56:00 +0000 (12:56 -0600)] 
tools/cgxget: de-allocate cg_convert_list[] in convert_cgroup()

The commit 66799b867c7 (tools/cgxget: fix the resource leak in
convert_cgroup()), is a partial fix. It de-allocated the array members
of the dynamically allocated cg_converted_list[], but fails to free()
the cg_converted_list.  Fix the resource leak by de-allocating it.

Fixes: 66799b867c7 (tools/cgxget: fix the resource leak in convert_group)
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: fix dereference after null check
Kamalesh Babulal [Wed, 3 Aug 2022 18:36:48 +0000 (12:36 -0600)] 
api.c: fix dereference after null check

Fix dereference after null check warning, reported by Coverity tool:

CID 258308 (#1 of 1): Dereference after null check (FORWARD_NULL).
var_deref_model: Passing null pointer controller to strncmp, which
dereferences it.

Fix the warning in cgroup_get_controller_version(), by checking for the
an empty controller in the case of cgroup v1.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agodaemon/cgrulesengd: check the bytes read in cgre_receive_unix_domain_msg()
Kamalesh Babulal [Wed, 3 Aug 2022 18:20:36 +0000 (12:20 -0600)] 
daemon/cgrulesengd: check the bytes read in cgre_receive_unix_domain_msg()

Fix ignoring the number of bytes read, warning reported by Coverity
tool:

CID 258286 (#2 of 2): Ignoring number of bytes read (CHECKED_RETURN).
check_return: read(int, void *, size_t) returns the number of bytes
read, but it is ignored.

In cgre_receive_unix_domain_msg(), the number of bytes read() is
ignored, while reading from the flag value from the socket. Coverity
warns on not checking the number of bytes read, fix it.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: check the bytes read in cgroup_register_unchanged_process()
Kamalesh Babulal [Thu, 28 Jul 2022 19:32:05 +0000 (13:32 -0600)] 
api.c: check the bytes read in cgroup_register_unchanged_process()

Fix ignoring the number of bytes read, warning reported by Coverity
tool:

CID 258288 (#1 of 1): Ignoring number of bytes read (CHECKED_RETURN).
check_return: read(int, void *, size_t) returns the number of bytes
read, but it is ignored.

In cgroup_register_unchanged_process(), the number of byte read/written
using read()/write() are ignored but coverity it warns about the read()
only, let's fix it.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: fix null deference in is_cgrp_ctrl_shared_mnt()
Kamalesh Babulal [Wed, 27 Jul 2022 19:34:45 +0000 (13:34 -0600)] 
api.c: fix null deference in is_cgrp_ctrl_shared_mnt()

Fix explicit null dereferenced warning, reported by Coverity tool:

CID 258306 (#1 of 1): Explicit null dereferenced (FORWARD_NULL).
var_deref_model: Passing null pointer controller_name to
cgroup_find_parent, which dereferences it.

the code path which leads to the null dereference:
cgroup_delete_cgroup_ext()
- cgroup_find_parent()
  - is_cgrp_ctrl_shared_mnt()

is_cgrp_ctrl_shared_mnt(), assumes that the controller_name is non-NULL
but there are changes that, this static function might be called with
NULL controller_name, let's fix it with a check.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgsnapshot: fix out-of-bounds write in parse_controllers()
Kamalesh Babulal [Wed, 27 Jul 2022 19:28:04 +0000 (13:28 -0600)] 
tools/cgsnapshot: fix out-of-bounds write in parse_controllers()

Fix Out-of-bounds write warning, reported by Coverity tool:

CID 258289 (#2 of 2): Out-of-bounds write (OVERRUN)16. overrun-local:
Overrunning array controllers of 100 4096-byte elements at element index
100 (byte offset 413695) using index max (which evaluates to 100).

there are chances, that the index variable max dereferences controller
array might be over the array size of 100. Add upper bound checks
to index variable max, so that it doesn't overrun the controller array.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: check for invalid error code in cgroup_strerror()
Kamalesh Babulal [Wed, 27 Jul 2022 19:13:59 +0000 (13:13 -0600)] 
api.c: check for invalid error code in cgroup_strerror()

Fix array overflow warning, reported by the Coverity tool:

CID 258309 (#1 of 1): Out-of-bounds read (OVERRUN). overrun-local:
Overrunning array cgroup_strerror_codes of 32 8-byte elements at element
index 49999 (byte offset 399999) using index code % ECGROUPNOTCOMPILED
(which evaluates to 49999).

there are chances of users passing error codes, resulting in crossing
the upper bound of the cgroup_strerror_codes[], fix it by introducing
bound checks.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: fix the resource leak in convert_cgroup()
Kamalesh Babulal [Wed, 27 Jul 2022 19:01:31 +0000 (13:01 -0600)] 
tools/cgxget: fix the resource leak in convert_cgroup()

Fix a resource leak warning reported by the Coverity tool:

CID 258272 (#1-2 of 2): Resource leak (RESOURCE_LEAK). leaked_storage:
Variable cg_converted_list going out of scope leaks the storage it
points to.

while free'ing() the cg_converted_list() via cgroup_free(), wrong array
index variable was passed, causing the resource leak. Fix it by passing
the right index variable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: fix resource leak in get_cv_value()
Kamalesh Babulal [Wed, 27 Jul 2022 18:55:20 +0000 (12:55 -0600)] 
tools/cgxget: fix resource leak in get_cv_value()

Fix a resource leak, reported by the Coverity tool:

CID 258291 (#1 of 1): Resource leak (RESOURCE_LEAK)8. leaked_storage:
Variable handle going out of scope leaks the storage it points to.

In get_cv_value(), currently, we goto end label, on the failure of
strdup() before closing the handle, leaking the resource. Fix it by
removing the goto, that allows the code flow to close the handle and
execute the code under the end label.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: fix resource leak in get_cv_value()
Kamalesh Babulal [Wed, 27 Jul 2022 18:48:19 +0000 (12:48 -0600)] 
tools/cgget: fix resource leak in get_cv_value()

Fix a resource leak, reported by the Coverity tool:

CID 258291 (#1 of 1): Resource leak (RESOURCE_LEAK)8. leaked_storage:
Variable handle going out of scope leaks the storage it points to.

In get_cv_value(), currently, we goto end label, on the failure of
strdup() before closing the handle, leaking the resource. Fix it by
removing the goto, that allows the code flow to close the handle and
execute the code under the end label.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi: null terminate readlink buffer in cgroup_get_procname_from_procfs()
Kamalesh Babulal [Wed, 27 Jul 2022 18:43:37 +0000 (12:43 -0600)] 
api: null terminate readlink buffer in cgroup_get_procname_from_procfs()

Fix readlink buffer null termination warning, reported by Coverity tool:

CID 258273 (#2 of 2): String not null terminated (STRING_NULL).
string_null: Passing unterminated string buf to strdup, which expects a
null-terminated string.

As per the man pages (man 2 readlink):
"readlink() does not append a null byte to buf.  It  will (silently)
truncate the contents (to a length of bufsiz characters), in case the
buffer is too small to hold all of the contents."

Explicitly null terminate the buffer passed to readlink() in
cgroup_get_procname_from_procfs()

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi: null terminate readlink buffer in cg_get_procname_from_proc_cmdline()
Kamalesh Babulal [Wed, 20 Jul 2022 17:22:01 +0000 (11:22 -0600)] 
api: null terminate readlink buffer in cg_get_procname_from_proc_cmdline()

Fix readlink buffer null termination warning, reported by Coverity tool:

CID 258276 (#1 of 1): String not null terminated (STRING_NULL).
string_null: Passing unterminated string buf_cwd to strcat, which
expects a null-terminated string.

As per the man pages (man 2 readlink):
"readlink() does not append a null byte to buf.  It  will  (silently)
truncate the contents (to a length of bufsiz characters), in case the
buffer is too small to hold all of the contents."

Explicitly null terminate the buffer passed to readlink() in
cg_get_procname_from_proc_cmdline().

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: fix string termination in cgroup_get_procname_from_procfs()
Kamalesh Babulal [Wed, 20 Jul 2022 17:15:27 +0000 (11:15 -0600)] 
api.c: fix string termination in cgroup_get_procname_from_procfs()

Fix non-terminated string warning, reported by Coverity tool:

CID 258273 (#2 of 2): String not null terminated (STRING_NULL)6.
string_null: Passing unterminated string buf to strdup, which expects a
null-terminated string.

use snprintf() instead of sprintf(), to string terminate
cgroup_get_procname_from_procfs().

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agowrapper.c: null terminate string in cgroup_new_cgroup()
Kamalesh Babulal [Wed, 20 Jul 2022 17:10:03 +0000 (11:10 -0600)] 
wrapper.c: null terminate string in cgroup_new_cgroup()

Fix non-terminated string warning, reported by Coverity tool:

CID 258290 (#1 of 1): String not null terminated (STRING_NULL)46.
string_null: Passing unterminated string aux_cgroup->name to
cgroup_create_cgroup, which expects a null-terminated string.

The call patch leading to this warning:
config.c::cgroup_config_create_template_group()
- wrapper.c::cgroup_new_cgroup()

fix it by null terminating the string.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-cpu: fix resource leak in read_setting()
Kamalesh Babulal [Wed, 20 Jul 2022 17:06:02 +0000 (11:06 -0600)] 
abstraction-cpu: fix resource leak in read_setting()

Fix a resource leak, reported by Coverity tool:

CID 258274 (#1 of 1): Resource leak (RESOURCE_LEAK)6. leaked_storage:
Variable handle going out of scope leaks the storage it points to

In read_setting(), currently, we goto end label, on the failure of
strdup() before closing the handle, leaking the resource. Fix it by
removing the goto, that allows the code flow to close the handle and
execute the code under the end label.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgsnapshot: add ret value fix in parse_controllers()
Kamalesh Babulal [Wed, 20 Jul 2022 16:56:05 +0000 (10:56 -0600)] 
tools/cgsnapshot: add ret value fix in parse_controllers()

Fix the unused ret value warning, reported by Coverity:

CID 258275 (#1 of 1): Unused value (UNUSED_VALUE)returned_value:
Assigning value from display_controller_data(controllers, program_name)
to ret here, but that stored value is overwritten before it can be used.

The parse_controllers(), doesn't check for errors in the value returned
by display_controller_data(). The return value might very well contain
an error, that might go unnoticed. Fix it by adding a check for the
return value.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: add ret value fix in cgroup_change_cgroup_flags()
Kamalesh Babulal [Wed, 13 Jul 2022 19:42:11 +0000 (13:42 -0600)] 
api.c: add ret value fix in cgroup_change_cgroup_flags()

Fix the unused ret value warning, reported by Coverity:

CID 258304 (#1 of 1): Unused value (UNUSED_VALUE)returned_value:
Assigning value from cgroup_create_template_group(newdest, tmp, flags)
to ret here, but that stored value is overwritten before it can be used.

It turns out that cgroup_change_cgroup_flags(), calls the function
cgroup_create_template_group() to a cgroup based on a template, which
may fail and we don't check the return value for the error. Â This fix
adds the check and bails out on error.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: replace strcat() with strncat()
Kamalesh Babulal [Tue, 12 Jul 2022 17:23:58 +0000 (11:23 -0600)] 
tools/cgget: replace strcat() with strncat()

Fix copy into fixed size buffer warning, reported by Coverity tool:

CID 258284 (#4 of 4): Copy into fixed size buffer (STRING_OVERFLOW)1.
fixed_size_dest: You might overrun the 4096-character fixed-size string
tmp_val by copying tok without checking the length.

In indent_multiline_value(), warned about the usage of strcat(), that
might overwrite the string. Fix it by replacing strcat() -> strncat()
in the function.

Signed-off-by: Kamalesh Babulal kamalesh.babulal@oracle.com
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: replace strcat() with strncat()
Kamalesh Babulal [Tue, 12 Jul 2022 17:21:57 +0000 (11:21 -0600)] 
tools/cgxget: replace strcat() with strncat()

Fix copy into fixed size buffer warning, reported by Coverity tool:

CID 258284 (#4 of 4): Copy into fixed size buffer (STRING_OVERFLOW)1.
fixed_size_dest: You might overrun the 4096-character fixed-size string
tmp_val by copying tok without checking the length.

In indent_multiline_value(), warned about the usage of strcat(), that
might overwrite the string. Fix it by replacing strcat() -> strncat()
in the function.

Signed-off-by: Kamalesh Babulal kamalesh.babulal@oracle.com
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: fix a resource leak get_cv_value()
Kamalesh Babulal [Mon, 11 Jul 2022 19:40:08 +0000 (13:40 -0600)] 
tools/cgget: fix a resource leak get_cv_value()

Fix a resource leak in get_cv_value(), reported by Coverity tool:

CID 258291 (#1 of 1): Resource leak (RESOURCE_LEAK). leaked_storage:
Variable handle going out of scope leaks the storage it points to.

failure on the realloc(), doesn't free the *handle. Fix it by using
the goto read_end(), that does the job of freeing the handle.

Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/tools-common.h: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:38:54 +0000 (20:08 +0530)] 
tools/tools-common.h: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/tools-common.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:36:17 +0000 (20:06 +0530)] 
tools/tools-common.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/lssubsys: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:32:44 +0000 (20:02 +0530)] 
tools/lssubsys: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/lscgroup: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:30:18 +0000 (20:00 +0530)] 
tools/lscgroup: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:27:41 +0000 (19:57 +0530)] 
tools/cgxget: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxset: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:22:42 +0000 (19:52 +0530)] 
tools/cgxset: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgsnapshot: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:21:09 +0000 (19:51 +0530)] 
tools/cgsnapshot: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgset: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:16:13 +0000 (19:46 +0530)] 
tools/cgset: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:14:25 +0000 (19:44 +0530)] 
tools/cgget: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgexec: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:08:53 +0000 (19:38 +0530)] 
tools/cgexec: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgcreate: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 14:02:56 +0000 (19:32 +0530)] 
tools/cgcreate: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgconfig: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:30:09 +0000 (14:00 +0530)] 
tools/cgconfig: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgdelete: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:29:11 +0000 (13:59 +0530)] 
tools/cgdelete: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgclassify: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:26:34 +0000 (13:56 +0530)] 
tools/cgclassify: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agopam/pam_cgroup.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:23:38 +0000 (13:53 +0530)] 
pam/pam_cgroup.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agodaemon/Makefile.am: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:22:11 +0000 (13:52 +0530)] 
daemon/Makefile.am: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agodaemon/cgruleseng.h: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:21:22 +0000 (13:51 +0530)] 
daemon/cgruleseng.h: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agodaemon/cgruleseng.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 08:18:46 +0000 (13:48 +0530)] 
daemon/cgruleseng.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoMakefile.am: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
Makefile.am: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agowrapper.c: increase the column width to 100
Kamalesh Babulal [Sat, 9 Jul 2022 13:24:29 +0000 (18:54 +0530)] 
wrapper.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoparse.y: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
parse.y: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agolibcgroup-internal.h: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
libcgroup-internal.h: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoconfig.c: increase the column width to 100
Kamalesh Babulal [Sat, 9 Jul 2022 13:21:20 +0000 (18:51 +0530)] 
config.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-map.h: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-map.h: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-map.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-map.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-cpuset.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-cpuset.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-cpu.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-cpu.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-common.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-common.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across
the file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoabstraction-common.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
abstraction-common.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across the
file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: increase the column width to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:33:11 +0000 (13:03 +0530)] 
api.c: increase the column width to 100

100 column width is more comfortable to read over 80 columns, lets
increase it.  This patch, also introduced/removes empty lines across the
file, making it more readable.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agocheckpatch.conf: increase the character limit to 100
Kamalesh Babulal [Thu, 30 Jun 2022 07:03:57 +0000 (12:33 +0530)] 
checkpatch.conf: increase the character limit to 100

100 column width is more comfortable to read over 80 columns, lets
increase the value in the configuration file.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: fix a resource leak get_cv_value()
Kamalesh Babulal [Fri, 8 Jul 2022 16:50:00 +0000 (10:50 -0600)] 
tools/cgxget: fix a resource leak get_cv_value()

Fix a resource leak in get_cv_value(), reported by Coverity tool:

CID 258291 (#1 of 1): Resource leak (RESOURCE_LEAK). leaked_storage:
Variable handle going out of scope leaks the storage it points to.

failure on the realloc(), doesn't free the *handle. Fix it by using the
goto read_end(), that does the job of freeing the handle.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agowrapper.c: return on failure in cgroup_add_all_controllers()
Kamalesh Babulal [Fri, 8 Jul 2022 16:37:09 +0000 (10:37 -0600)] 
wrapper.c: return on failure in cgroup_add_all_controllers()

Add missing goto statement, to return on failure, reported by Coverity
tool:

CID 258281 (#1 of 1): Unused value (UNUSED_VALUE)assigned_value:
Assigning value ECGINVAL to ret here, but that stored value is
overwritten before it can be used.

the tool reported about unused ret value, but it turned out that the
NULL ret value is for failed attempt to add a controller to the desired
cgroup and needs bailing out after losing the handle. Fix it by
introducing the goto statement in cgroup_add_all_controllers()

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
TJH: Also fix unrelated grammar error near this change.

3 years agoconfig: remove dead code in config_validate_namespaces()
Kamalesh Babulal [Fri, 8 Jul 2022 16:28:49 +0000 (10:28 -0600)] 
config: remove dead code in config_validate_namespaces()

Remove the logically dead code, reported by the Coverity tool:

CID 258280 (#1 of 1): Logically dead code (DEADCODE)dead_error_begin:
Execution cannot reach this statement: last_errno = *__errno_locat....

cg_mount_table[i].mount.path can never be NULL, so remove that check in
the config_validate_namespaces().

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoconfig: fix string termination issues
Kamalesh Babulal [Wed, 6 Jul 2022 20:18:03 +0000 (14:18 -0600)] 
config: fix string termination issues

Fix non-terminated string warnings, reported by the Coverity tool:

CID 258293 (#2 of 2): Copy into fixed size buffer (STRING_OVERFLOW).
fixed_size_dest: You might overrun the 32-character fixed-size string
config_namespace_table[namespace_table_index].name by copying name
without checking the length.

fix one another similar string
config_namespace_table[namespace_table_index].mount.path in the same
function cgroup_config_insert_into_namespace_table() by explicitly
terminating by appending '\0';

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agowrapper.c: fix string non-termination warning
Kamalesh Babulal [Wed, 6 Jul 2022 20:12:28 +0000 (14:12 -0600)] 
wrapper.c: fix string non-termination warning

Fix non-terminated string warning, reported by Coverity tool:

CID 258266 (#1 of 1): String not null-terminated (STRING_NULL).
string_null: Passing unterminated string con to strtok, which expects a
null-terminated string.

Fix the warning in create_cgroup_from_name_value_pairs(), by adding
'\0'.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoconfig: cgroup_config_insert_into_mount_table() use strncpy()
Kamalesh Babulal [Wed, 6 Jul 2022 20:08:14 +0000 (14:08 -0600)] 
config: cgroup_config_insert_into_mount_table() use strncpy()

Fix copy into fixed size buffer warning, reported by Coverity tool:

CID 258282 (#2 of 2): Copy into fixed size buffer (STRING_OVERFLOW)9.
fixed_size_dest: You might overrun the 4096-character fixed-size string
config_mount_table[config_table_index].mount.path by copying mount_point
without checking the length.
parameter_as_source: Note: This defect has an elevated risk because the
source argument is a parameter of the current function

Also, convert config_mount_table[config_table_index].name strcpy to
strncpy.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: avoid ambiguous controller name matches
liupan [Wed, 6 Jul 2022 19:53:35 +0000 (13:53 -0600)] 
api.c: avoid ambiguous controller name matches

calling "hasmntopt" to determine if the controller name exists in
"mntopt", may cause errors because of "hasmntopt" only match substring.

cpu controller may incorrectly match to cpuset when cpuset mount info
appeared before cpu,cpuacct in "/proc/mounts", so we need to validate
the last character to make sure the controller name matches exactly.

Signed-off-by: liupan <490021209@qq.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agogithub: Run apt-get update first
Tom Hromatka [Thu, 9 Jun 2022 18:59:27 +0000 (12:59 -0600)] 
github: Run apt-get update first

Run apt-get update prior to running apt-get install

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: Fix handling of full cg_mount_table[]
Tom Hromatka [Thu, 9 Jun 2022 18:45:29 +0000 (12:45 -0600)] 
api.c: Fix handling of full cg_mount_table[]

Commit 9ce90c7edd28 ("api.c: fix segfault in cgroup_populate_mount_points()")
added logic to handle the case when there are 100+ cgroup mounts and
not overflow the cg_mount_table[].  But elsewhere in the libcgroup
code, it's expected that the last entry in the cg_mount_table[] has
a null name entry.

When the cg_mount_table[] is full, make the name of the last entry
null so that loops know to exit.  Also, add a couple bail out points
in cgroup_populate_mount_points() to ensure that we don't write
beyond the end of the table.

Depending upon the order in which the tests are run, this failure can
manifest itself as follows:
$ cat tests/ftests/ftests-nocontainer.sh.log
free(): invalid pointer
./ftests-nocontainer.sh: line 18: 199390 Aborted
(core dumped) ./ftests.py -l 10 -L "$START_DIR/ftests-nocontainer.py.log" --no-container -n Libcg"$RANDOM"
FAIL ftests-nocontainer.sh (exit status: 134)

Fixes: 9ce90c7edd28 ("api.c: fix segfault in cgroup_populate_mount_points()")
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
3 years agoapi.c: search_and_append_mnt_path() use strncpy()
Kamalesh Babulal [Thu, 2 Jun 2022 16:04:32 +0000 (10:04 -0600)] 
api.c: search_and_append_mnt_path() use strncpy()

Fix copy into fixed size buffer warning, reported by Coverity tool:

CID 258279 (#1 of 1): Copy into fixed size buffer (STRING_OVERFLOW).
fixed_size_dest: You might overrun the 4096-character fixed-size string
mnt_point->path by copying path without checking the length.
10. parameter_as_source: Note: This defect has an elevated risk
because the source argument is a parameter of the current function.

fix this issue by using strnpy(), in place of strcpy().

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agowrapper: null terminated string in cgroup_add_controller()
Kamalesh Babulal [Thu, 2 Jun 2022 15:51:17 +0000 (09:51 -0600)] 
wrapper: null terminated string in cgroup_add_controller()

Fix non-terminated string warning, reported by Coverity tool:

CID 258271 (#1 of 1): String not null terminated (STRING_NULL).
string_null: Passing unterminated string cgc->name to strcmp, which
expects a null-terminated string.

This issue was reported following the path src/abstraction-common.c:
- cgroup_convert_cgroup()
  - cgroup_add_controller()

Also, use CONTROL_NAMELEN_MAX macro, in place of calculating the size of
controller->name twice.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi: null terminated string in cgroup_get_controller_next()
Kamalesh Babulal [Tue, 31 May 2022 22:54:28 +0000 (16:54 -0600)] 
api: null terminated string in cgroup_get_controller_next()

Fix non-terminated string warnings, reported by Coverity tool:

CID 258299 (#1-2 of 2): String not null terminated (STRING_NULL).
string_null: Passing unterminated string controller.path to strcmp,
which expects a null-terminated string

This issue was reported following the path src/tools/cgsnapshot.c:
- parse_controllers()
  - cgroup_get_controller_begin()
    - cgroup_get_controller_next()

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoconfig: add missing ret value check from getgrnam_r()
Kamalesh Babulal [Tue, 31 May 2022 22:51:21 +0000 (16:51 -0600)] 
config: add missing ret value check from getgrnam_r()

Fix Unchecked return values from library, reported by Coverity tool:

CID 258287 (#1 of 1): Unchecked return value from library
(CHECKED_RETURN).
check_return: Calling getgrnam_r(value, group, buffer, 20480UL,
&group_buffer) without checking return value. This library function may
fail and return an error code.

CID 258303 (#1 of 1): Unchecked return value from library
(CHECKED_RETURN).
check_return: Calling getgrnam_r(value, group, buffer, 20480UL,
&group_buffer) without checking return value. This library function may
fail and return an error code.

Coverity expects us to check for return value from getgrnam_r(), instead
of the current for group_buffer != NULL.  Which is right, let's make
Coverity happy by moving the check to return value.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi: fix coverity warning about uninitialized variable
Kamalesh Babulal [Fri, 27 May 2022 20:56:42 +0000 (14:56 -0600)] 
api: fix coverity warning about uninitialized variable

Fix Uninitialized scalar variable, reported by Coverity tool:

CID 258269 (#1 of 1): Uninitialized scalar variable (UNINIT).
uninit_use: Using uninitialized value version.

In _cgroup_create_cgroup(), the (cg_version_t)version is uninitialized
and might be read the version in false path. It worked until now
because the version is assigned in the true path and given that its enum
the checks are not bounded by range, but rather specific.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: add cgroup error string for ECGNOVERSIONCONVERT
Kamalesh Babulal [Thu, 26 May 2022 14:12:30 +0000 (08:12 -0600)] 
api.c: add cgroup error string for ECGNOVERSIONCONVERT

Add the missing error string for the error code ECGNOVERSIONCONVERT to
cgroup_strerror_codes[], that is looked upon to print string version of
the error encountered.

Reproducer:
-----------
$ cat cgrp-strerr.c

int main(void)
{
        int err = ECGNOVERSIONCONVERT;

        fprintf(stderr, "%s\n", cgroup_strerror(err));

        return 0;
}

without the patch:
-----------------
$ ./cgrp-stderr
(null)

with the patch:
---------------
$ ./cgrp-stderr
Failed to convert from cgroup v1 to/from cgroup v2

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxget: fix coverity warning about resource leak
Kamalesh Babulal [Wed, 25 May 2022 17:11:43 +0000 (11:11 -0600)] 
tools/cgxget: fix coverity warning about resource leak

Fix a resource leaks reported by Coverity tool:

CID 258302 (#1 of 1): Resource leak (RESOURCE_LEAK). leaked_storage:
Variable dir going out of scope leaks the storage it points to

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: fix coverity warning about double free
Kamalesh Babulal [Wed, 25 May 2022 13:47:48 +0000 (07:47 -0600)] 
tools/cgget: fix coverity warning about double free

Fix double free warning, reported by Coverity tool:

CID 258297 (#1 of 1): Double free (USE_AFTER_FREE). double_free:
Calling closedir frees pointer dir which has already been freed.

As per the man page, the closedir(), closes the directory stream
associated with the dirp, but is ambiguous about if dirp is set to NULL
or not. Coverity answers that with the above report, that dirp is not
NULL and hence the double free.

Fixes: fea1ab8b45d7 ("tools/cgget: fix coverity warning about resource leak")
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: fix coverity out of bounds read warning
Kamalesh Babulal [Wed, 25 May 2022 13:40:10 +0000 (07:40 -0600)] 
api.c: fix coverity out of bounds read warning

Fix out of bounds read, reported by Coverity tool:

CID 1412156 (#1 of 1): Out-of-bounds read (OVERRUN).
overrun-local: Overrunning array cgroup_strerror_codes of 30 8-byte
elements at element index 49999 (byte offset 399999) using index
code % ECGROUPNOTCOMPILED (which evaluates to 49999).

Reproducer:
-----------
$ cat cgrp-strerr.c

int main(void)
{
        int err = ECGNONEMPTY;

        fprintf(stderr, "%s\n", cgroup_strerror(err));

        return 0;
}

without the patch:
-----------------
$ ./cgrp-stderr
(null)

with the patch:
---------------
$ ./cgrp-stderr
Failed to remove a non-empty group

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoconfigure: introduce --enable-tests/--disable-tests
Kamalesh Babulal [Mon, 23 May 2022 19:49:50 +0000 (13:49 -0600)] 
configure: introduce --enable-tests/--disable-tests

There are scenarios where running tests as part of the make check is
not desirable, like rpmbuild.  The build systems might not have the
environment to run the tests and might fail to build the packages.

This patch introduces, --enable-tests as a configure option, which
is set by default and can be disabled using the --disable-tests flag.
When disabled, the configure will skip creating the Makefiles for the
tests/* directories and in the top-level Makefile the SUBDIRS omits
tests. For example, consider the rpmbuild case to build rpm with
--disable-tests passed:
1. ./bootstrap.sh
2. ./configure ./configure --enable-opaque-hierarchy="name=systemd"
   --disable-tests
3. make check
4. make dist
5. cp libcgroup-3.0.0.tar.gz ~/rpmbuild/SOURCES
6. append --disable-tests to configure in libcgroup.spec
7. rpmbuild -ba libcgroup.spec

this will skip running the test/*, during the build, avoiding unexpected
failures

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgxset: fix Coverity uninitialized variable warning
Kamalesh Babulal [Fri, 20 May 2022 14:45:16 +0000 (08:45 -0600)] 
tools/cgxset: fix Coverity uninitialized variable warning

Originally this issue got reported on tools/cgset and since tools/cgxset
borrows most of the code from cgset, fix the issue here too.  The
original warning (cgset):

CID 1488715 (#1 of 1): Uninitialized scalar variable (UNINIT).
uninit_use_in_call: Using uninitialized value *src_cg_path as
argument to %s when calling fprintf.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgsnapshot: fix coverity uninitialized variable warning
Kamalesh Babulal [Fri, 20 May 2022 14:44:58 +0000 (08:44 -0600)] 
tools/cgsnapshot: fix coverity uninitialized variable warning

Fix uninitialized scalar variable, reported by Coverity tool:

CID 1412125 (#1 of 1): Uninitialized scalar variable (UNINIT).
uninit_use_in_call: Using uninitialized element of array *controllers
when calling is_ctlr_on_list.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgset: fix coverity uninitialized variable warning
Kamalesh Babulal [Fri, 20 May 2022 14:44:27 +0000 (08:44 -0600)] 
tools/cgset: fix coverity uninitialized variable warning

Fix uninitialized scalar variable, reported by Coverity tool:

CID 1488715 (#1 of 1): Uninitialized scalar variable (UNINIT).
uninit_use_in_call: Using uninitialized value *src_cg_path as argument
to %s when calling fprintf.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/lssubsys: fix coverity uninitialized variable warning
Kamalesh Babulal [Fri, 20 May 2022 14:40:47 +0000 (08:40 -0600)] 
tools/lssubsys: fix coverity uninitialized variable warning

Fix uninitialized scalar variable, reported by Coverity tool:

CID 1488707 (#1 of 1): Uninitialized scalar variable (UNINIT).
uninit_use_in_call: Using uninitialized value *cont_names when calling
print_controller_mount.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agosrc/config: fix coverity warning about add missing unlock()
Kamalesh Babulal [Fri, 20 May 2022 14:25:35 +0000 (08:25 -0600)] 
src/config: fix coverity warning about add missing unlock()

Add missing unlock() of cg_mount_table_lock, reported by Coverity tool:

CID 1412126 (#1 of 1): Missing unlock (LOCK). missing_unlock:
Returning without unlocking cg_mount_table_lock.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgdelete: fix coverity wrong argument size warning
Kamalesh Babulal [Wed, 18 May 2022 17:09:51 +0000 (11:09 -0600)] 
tools/cgdelete: fix coverity wrong argument size warning

Fix a wrong argument size, reported by Coverity tool:

CID 1412122 (#1 of 1): Wrong sizeof argument (SIZEOF_MISMATCH)
suspicious_sizeof: Passing argument 8UL
/* sizeof (struct ext_cgroup_record *) */ to function calloc and then
casting the return value to struct ext_cgroup_record * is suspicious.

Also, fix the typo in the variable name, that's being allocated memory.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoworkflows/CI: upgrade CodeQL actions used to v2
Kamalesh Babulal [Mon, 16 May 2022 22:05:39 +0000 (16:05 -0600)] 
workflows/CI: upgrade CodeQL actions used to v2

CodeQL warns about deprecating v1 by Dec 2022.  Upgrade the CodeQL
actions, as per the recommendation made in the upgrade guide at:
https://github.blog/changelog/2022-04-27-code-scanning-deprecation-of-codeql-action-v1/

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/cgget: fix coverity warning about resource leak
Kamalesh Babulal [Mon, 16 May 2022 21:57:45 +0000 (15:57 -0600)] 
tools/cgget: fix coverity warning about resource leak

Fix two resource leaks reported by Coverity tool:

CID 1488718 (#1 of 1): Resource leak (RESOURCE_LEAK) leaked_storage:
Variable handle going out of scope leaks the storage it points to.

CID 1488723 (#1 of 1): Resource leak (RESOURCE_LEAK) leaked_storage:
Variable dir going out of scope leaks the storage it points to.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoapi.c: resize controller name to 32 from 4096 bytes
Kamalesh Babulal [Fri, 6 May 2022 15:36:33 +0000 (21:06 +0530)] 
api.c: resize controller name to 32 from 4096 bytes

Linux kernel warns on the cgroup controller name length greater than
32 bytes during the cgroup initialization in cgroup_init_early().  Adopt
the same size of 32 bytes (including the null byte) for controller name
in the struct cg_controller and struct cg_mount_table_s.  This resize
from FILENAME_MAX (4096 bytes) to a mere 32 bytes, reduces the
libcgroup.so library:

Without the patch:
------------------
$ size -d src/.libs/libcgroup.so
   text    data     bss     dec     hex filename
 123841    3600 2476532 2603973  27bbc5 src/.libs/libcgroup.so

With the patch:
---------------
$ size -d src/.libs/libcgroup.so
   text    data     bss     dec     hex filename
 123569    3600 1257332 1384501  152035 src/.libs/libcgroup.so

also replace the index FILENAME_MAX with CONTROL_NAMELEN_MAX at the
struct cg_controller::name and struct cg_mount_table_s::name references.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoman/lscgroup: add tool support status
Kamalesh Babulal [Fri, 13 May 2022 15:17:48 +0000 (20:47 +0530)] 
man/lscgroup: add tool support status

lscgroup is currently supported on cgroups v1 only, add the note about
the support status in the man page.

Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agoman/lssubsys: add tool support status
Kamalesh Babulal [Fri, 13 May 2022 15:17:43 +0000 (20:47 +0530)] 
man/lssubsys: add tool support status

lssubsys is currently supported on cgroups v1 only, add the note about
the support status in the man page.

Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/lscgroup: add support status for the tool
Kamalesh Babulal [Fri, 13 May 2022 15:17:39 +0000 (20:47 +0530)] 
tools/lscgroup: add support status for the tool

lscgroup currently doesn't support the cgroupv2 filesystem.  Add the
warning about the support status in the help.

Fixes: https://github.com/libcgroup/libcgroup/issues/50
Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotools/lssubsys: add support status for the tool
Kamalesh Babulal [Fri, 13 May 2022 15:17:33 +0000 (20:47 +0530)] 
tools/lssubsys: add support status for the tool

lssubsys currently doesn't support the cgroups v2 filesystem.  Add the
warning about the support status in the help.

Fixes: https://github.com/libcgroup/libcgroup/issues/50
Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>