]> git.ipfire.org Git - thirdparty/libcgroup.git/log
thirdparty/libcgroup.git
2 years agoapi: cgroup_get_cgroup() populate the controller list based on the subtree_control...
Tom Hromatka [Tue, 20 Dec 2022 22:33:23 +0000 (22:33 +0000)] 
api: cgroup_get_cgroup() populate the controller list based on the subtree_control file

In cgroup_get_cgroup(), populate the controller list in the cgroup
only with controllers that are enabled in cgroup.subtree_control.

As part of this change update the error codes from
cgroupv2_get_subtree_control() to better reflect memory allocation
errors

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
2 years agogunit/test-015: Populate subtree_control for leaf cgroup
Kamalesh Babulal [Tue, 20 Dec 2022 16:09:19 +0000 (21:39 +0530)] 
gunit/test-015: Populate subtree_control for leaf cgroup

We no more rely on the cgroup's parent subtree_control file to verify
if a controller is enabled for a cgroup. So, populate the leaf/child
cgroups with subtree_control file similar to the parent cgroup.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agogunit/test-012: Create subtree_control for leaf cgroup
Kamalesh Babulal [Tue, 20 Dec 2022 16:09:13 +0000 (21:39 +0530)] 
gunit/test-012: Create subtree_control for leaf cgroup

The test case relies on the parent cgroup's subtree_control file, while
creating a cgroup to verify the controllers enabled in created cgroup v2
and the current code cleverly emulates it.  With the change to enable
the controller at the leaf cgroup this emulation gets difficult, so
introduce a dummy cgroup v2 mount that will help in the construction of
the path when the cgroup v2 is created with the empty controller because
the brilliance lies in emulating it by manually creating the
subtree_control file to give the impression of enabling the controller
in the cgroup v2 cgroup.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoapi: cgroup v2 – read subtree_control of the leaf node
Kamalesh Babulal [Tue, 20 Dec 2022 16:09:08 +0000 (21:39 +0530)] 
api: cgroup v2 – read subtree_control of the leaf node

With cgroup v2, while checking if a controller is enabled for cgroup,
the tree is walked and checked up to the parent cgroup of the leaf node,
this guarantees that the controller available for the leaf cgroups in
the cgroup.controllers file, but this is incomplete because of the
controller can be both either enabled or disabled in the
cgroups.subtree_control file of the leaf cgroup.

Fix this ambiguity by reading until the leaf node's
cgroup.subtree_control file, instead.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoapi: cgroup v2 – enable controller at the leaf node
Kamalesh Babulal [Tue, 20 Dec 2022 16:09:02 +0000 (21:39 +0530)] 
api: cgroup v2 – enable controller at the leaf node

With cgroup v2, while creating a cgroup with a controller, the whole
hierarchy tree is walked, and the controller is enabled up to the parent
cgroup of the leaf node, this guarantees that the attached controller is
available in the leaf cgroups cgroup.controllers file, but this is
incomplete because the controller is not enabled in the leaf cgroup.

We do not have a separate API that is called to enable the controllers
but as a workaround, one can always call the
cgroup_set_values_recursive() to enable the controller in the leaf node.
To maintain the idea/compatibility with the cgroup v1, where creating a
cgroup on the controller mount point/hierarchy is equivalent to enabling
the controller in the cgroup v2, let's enable the controller in the leaf
node too.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agotools/cgxset: fix the tool name in the description
Kamalesh Babulal [Tue, 3 Jan 2023 21:15:39 +0000 (14:15 -0700)] 
tools/cgxset: fix the tool name in the description

The cgxset tool was forked from cgset and the tool description still
shows the original tool name, fix it.

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

2 years agotools/cgxget: replace cgget with cgxget
Kamalesh Babulal [Tue, 3 Jan 2023 21:15:25 +0000 (14:15 -0700)] 
tools/cgxget: replace cgget with cgxget

The cgxget was forked from cgget and messages/warnings printed to the
user still carry cgget keyword, which might get confusing to the user.
Replace the warnings/errors/info displayed to the user, along with
non-history occurrences of 'cgget' -> 'cgxget' throughout the file.

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

2 years agoapi.c: fix segfault in cgroup_attach_task_pid()
Kamalesh Babulal [Mon, 19 Dec 2022 16:20:46 +0000 (09:20 -0700)] 
api.c: fix segfault in cgroup_attach_task_pid()

When the user passes NULL in place of struct cgroup argument, the pid
passed as the second parameter is expected to be attached to root
hierarchies of the controllers in the case of legacy/hybrid modes and
to the root hierarchy in the case of unified mode.

The current code will segfault, while attempting to dereference a NULL
pointer, fix it by using the controller names, from cg_mount_table(),
that is already populated with the information and also remove the
controller_is_enabled check is specific to the cgroup v2 hierarchy.
With the root cgroup v2 hierarchy, all the controllers are enabled by
default, hence the check returns true always.

Reproducer:

int main(int argc, char *argv[]) {
        pid_t pid = atoi(argv[1]);
        int ret;

        ret = cgroup_init();
        if (ret) {
                printf("Failed to initialize: %s\n", cgroup_strerror(ret));
                exit(1);
        }

        ret = cgroup_attach_task_pid(NULL, pid);
        if (ret) {
                printf("Failed to attach %d to root cgroup(s): %s\n", pid, cgroup_strerror(ret));
                exit(1);
        }

        exit (0);
}

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

2 years agoTrival: Fix warning in strncmp
Balbir singh [Mon, 19 Dec 2022 15:45:15 +0000 (08:45 -0700)] 
Trival: Fix warning in strncmp

The name field of the structure is of a much smaller size
CONTROL_NAMELEN_MAX and not FILENAME_MAX. Listen to the
compiler and fix the issue.

Signed-off-by: Balbir singh <bsingharora@gmail.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit ecba55a594001958b253c62ba8d4e9fd5520ea94)

2 years agoworkflows/ci: rename package lxd to lxd-installer
Kamalesh Babulal [Tue, 6 Dec 2022 23:09:23 +0000 (16:09 -0700)] 
workflows/ci: rename package lxd to lxd-installer

On ubuntu-latest (22.04) the lxd package has been renamed to
lxd-installer, rename it in our .yml.

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

2 years agoftests: Add python files to the Makefile.am EXTRA_DIST list
Tom Hromatka [Tue, 1 Nov 2022 22:15:16 +0000 (16:15 -0600)] 
ftests: Add python files to the Makefile.am EXTRA_DIST list

Several tests weren't added to the EXTRA_DIST list.  Add them
and systemd.py to the list.

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

2 years agoftests: Add a test to create a systemd scope
Tom Hromatka [Tue, 1 Nov 2022 22:15:06 +0000 (16:15 -0600)] 
ftests: Add a test to create a systemd scope

Add a test to create a systemd scope where the user provides a pid.

-----------------------------------------------------------------
Test Results:
Run Date:                          Sep 29 21:27:17
Passed:                                  2 test(s)
Skipped:                                 0 test(s)
Failed:                                  0 test(s)
-----------------------------------------------------------------
Timing Results:
Test                                  Time (sec)
------------------------------------------------
setup                                       0.00
049-sudo-systemd_create_scope.py            1.04
050-sudo-systemd_create_scope2.py           3.03
teardown                                    0.00
------------------------------------------------
Total Run Time                              4.07

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

2 years agoftests: Add a test to create a systemd scope
Tom Hromatka [Tue, 1 Nov 2022 22:14:44 +0000 (16:14 -0600)] 
ftests: Add a test to create a systemd scope

-----------------------------------------------------------------
Test Results:
        Run Date:                          Sep 06 14:46:15
        Passed:                                  1 test(s)
        Skipped:                                 0 test(s)
        Failed:                                  0 test(s)
-----------------------------------------------------------------
Timing Results:
        Test                                       Time (sec)
        -----------------------------------------------------
        setup                                            0.00
        049-sudo-systemd_create_scope.py                 0.08
        teardown                                         0.00
        -----------------------------------------------------
        Total Run Time                                   0.03

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

2 years agoftests: Add support for running 'sudo' suite of tests
Tom Hromatka [Tue, 1 Nov 2022 22:14:30 +0000 (16:14 -0600)] 
ftests: Add support for running 'sudo' suite of tests

Some tests require sudo support for python/C bindings.  This is
awkward to implement using the Run() class and error prone.

Instead, invoke the entire test with sudo permissions via a separate
invocation of ftests.py.  This ensures that existing tests (that
don't require sudo) remain the same and don't accidentally get
elevated privileges.

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

2 years agoftests: Add systemd class
Tom Hromatka [Tue, 1 Nov 2022 22:14:16 +0000 (16:14 -0600)] 
ftests: Add systemd class

Add a class for managing interactions with systemd.  Currently it
only has a method for determining whether a scope is delegated or
not.

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

2 years agobootstrap: Enable python and systemd by default
Tom Hromatka [Tue, 1 Nov 2022 22:14:06 +0000 (16:14 -0600)] 
bootstrap: Enable python and systemd by default

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

2 years agopython: systemd: Add python bindings to create a systemd scope
Tom Hromatka [Tue, 1 Nov 2022 22:13:50 +0000 (16:13 -0600)] 
python: systemd: Add python bindings to create a systemd scope

Add python bindings to create a systemd scope.

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

2 years agosystemd: Add function to create a systemd scope
Tom Hromatka [Tue, 1 Nov 2022 22:13:38 +0000 (16:13 -0600)] 
systemd: Add function to create a systemd scope

Add a function, cgroup_create_scope(), to create a systemd
scope.  This scope can be delegated, in other words the cgroup
management of this scope can be delegated away from systemd.
This is the official way to create a cgroup that systemd will
not interfere with.

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

2 years agogithub/workflows/continuous-intergation: Adopt SPDX License tag
Kamalesh Babulal [Mon, 31 Oct 2022 17:19:29 +0000 (11:19 -0600)] 
github/workflows/continuous-intergation: Adopt SPDX License tag

Adopt SPDX license tag for all the source files, those already have
LGPL 2.1 boilerplate in them and those missing license information.
All the files in the project fall under project license, hence
explicitly adding LGPL-2.1-only identifier to the files missing license
information. Adopting SPDX license helps the compliance tools to
determine the license and also helps in reducing the repetitive license
boilerplate across source files.

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

2 years agogithub/actions/setup-libcgroup: Adopt SPDX License tag
Kamalesh Babulal [Mon, 31 Oct 2022 17:19:15 +0000 (11:19 -0600)] 
github/actions/setup-libcgroup: Adopt SPDX License tag

Adopt SPDX license tag for all the source files, those already have
LGPL 2.1 boilerplate in them and those missing license information.
All the files in the project fall under project license, hence
explicitly adding LGPL-2.1-only identifier to the files missing license
information. Adopting SPDX license helps the compliance tools to
determine the license and also helps in reducing the repetitive license
boilerplate across source files.

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

2 years agogithub/actions/code-coverage: Adopt SPDX License tag
Kamalesh Babulal [Mon, 31 Oct 2022 17:19:01 +0000 (11:19 -0600)] 
github/actions/code-coverage: Adopt SPDX License tag

Adopt SPDX license tag for all the source files, those already have
LGPL 2.1 boilerplate in them and those missing license information.
All the files in the project fall under project license, hence
explicitly adding LGPL-2.1-only identifier to the files missing license
information. Adopting SPDX license helps the compliance tools to
determine the license and also helps in reducing the repetitive license
boilerplate across source files.

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

2 years agotests: remove github/{actions,workflows}
Kamalesh Babulal [Mon, 31 Oct 2022 17:10:29 +0000 (11:10 -0600)] 
tests: remove github/{actions,workflows}

Remove the GitHub actions and workflows from the tests directory, they
are not run anymore after the movement of libcgroup-tests into libcgroup
repo.  Also, the libcgroup repo covers all the steps executed by
libcgroup-test actions/workflows.

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

2 years agopython: Add flake8 configuration
Kamalesh Babulal [Mon, 31 Oct 2022 17:07:26 +0000 (11:07 -0600)] 
python: Add flake8 configuration

flake8 Python lint tool, allows us to customize and extend the rules.
Add our own rule to allow a 100-character width in the sources.

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

2 years agoworkflows/ci: add Python lint
Kamalesh Babulal [Mon, 31 Oct 2022 17:07:13 +0000 (11:07 -0600)] 
workflows/ci: add Python lint

Add Python lint to the GitHub workflow.  This was previously part of
the libcgroup-test project GitHub workflow, which hosted most of the
python source code.  Now that libcgroup-test is part of libcgroup repo,
let's add the lint workflow here too.

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

2 years agoapi.c: fix resource leak in cg_chmod_path()
Kamalesh Babulal [Tue, 25 Oct 2022 21:27:39 +0000 (15:27 -0600)] 
api.c: fix resource leak in cg_chmod_path()

Fix resource leak, reported by Coverity Tool:

CID 276160 (#1 of 1): Resource leak (RESOURCE_LEAK)10. leaked_handle:
Handle variable fd going out of scope leaks the handle.

In cg_chmod_path(), the file descriptor checks for fd > 0, Coverity
warns about the possibility of the file descriptor being 0, fix it by
changing the check from '0' -> '-1'.

Fixes: 91cf2e4b7ceb ("api.c: fix file open in cg_chmod_path()")
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit f2e192adfb6c6824163b4db8da07efe6d01f617b)

2 years agoftests: Add test for cgroup_setup_mode()
Tom Hromatka [Tue, 25 Oct 2022 21:20:21 +0000 (15:20 -0600)] 
ftests: Add test for cgroup_setup_mode()

Add a python bindings test for cgroup_setup_mode()

-----------------------------------------------------------------
Test Results:
        Run Date:                          Oct 18 19:28:31
        Passed:                                  1 test(s)
        Skipped:                                 0 test(s)
        Failed:                                  0 test(s)
-----------------------------------------------------------------
Timing Results:
        Test                                  Time (sec)
        ------------------------------------------------
        setup                                       0.00
        048-pybindings-get_cgroup_mode.py           0.00
        teardown                                    0.00
        ------------------------------------------------
        Total Run Time                              0.00

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

2 years agoftests: Add function to get the cgroup mode
Tom Hromatka [Tue, 18 Oct 2022 19:27:06 +0000 (19:27 +0000)] 
ftests: Add function to get the cgroup mode

Add a function to the Cgroup class to get the cgroup mode.  This
function is analogous to the C function, cgroup_setup_mode() and
can be used to verify the behavior of cgroup_setup_mode().

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

2 years agopython: Add python bindings for cgroup_setup_mode()
Tom Hromatka [Tue, 25 Oct 2022 21:19:10 +0000 (15:19 -0600)] 
python: Add python bindings for cgroup_setup_mode()

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

2 years agotools/cgget: add support to print cgroup setup
Kamalesh Babulal [Tue, 25 Oct 2022 21:18:55 +0000 (15:18 -0600)] 
tools/cgget: add support to print cgroup setup

Add a new switch (-m), that will print the current cgroup mode the
system/VM is booted it.  It uses the API, cgroup_setup_mode() that
returns one of the modes (Legacy/Unified/Hybrid) the system is
booted with.

$ cgget -m
Legacy Mode (Cgroup v1 only).

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

2 years agoapi: Introduce a new API to find the cgroup setup mode
Kamalesh Babulal [Tue, 25 Oct 2022 21:18:40 +0000 (15:18 -0600)] 
api: Introduce a new API to find the cgroup setup mode

This patch introduces a new API to detect the current cgroup setup
mode (Legacy/Unified/Hybrid). The setup will depend on the Linux
Kernel's grub command line, the system/VM is booted with.

Uses cases:
Depending upon the cgroup setup, the users can enable or disable
features in their applications. Like some controllers are only available
on cgroup v2, so they might need to set/get settings for those available
controllers only.

Suggested-by: Tom Hromatka <tom.hromatka@oracle.com>
Suggested-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit 4aefa6d04f5e8a4b3914bdcdf2825943c4aef3fc)

2 years agoconfigure: fix bashim of --enable-samples option
Kamalesh Babulal [Thu, 6 Oct 2022 20:26:52 +0000 (14:26 -0600)] 
configure: fix bashim of --enable-samples option

Make the --enable-samples option's bash code POSIX-complaint.  There
might be warnings issued while running configure on other shells like
/bin/sh, those default on Debian systems.

Fixes: 6197ca3d693f ("configure: introduce --enable-samples option")
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit d3ac1bb4cd0ab94fb168bbcaa917496a7d537c64)

2 years agomake: build/run tests, only with --enable-tests
Kamalesh Babulal [Fri, 30 Sep 2022 15:48:49 +0000 (09:48 -0600)] 
make: build/run tests, only with --enable-tests

Control the building and testing (make check) of the tests using the
if/endif WITH_TESTS guard based on the configuration options passed.
If the --enable-tests (default on) is passed during ./configure step,
the SUBDIRS directories (ftests/gunit) are recused into build and
make check are run.

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

2 years agomake: use DIST_SUBDIRS
Kamalesh Babulal [Sat, 17 Sep 2022 14:05:06 +0000 (19:35 +0530)] 
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>
(cherry picked from commit 48d49fbbe3eaf9c1ddd640f99cd8921752ab4e1d)

2 years agoftests/027: fix the exit code on invalid parameters
Kamalesh Babulal [Thu, 29 Sep 2022 10:43:34 +0000 (16:13 +0530)] 
ftests/027: fix the exit code on invalid parameters

Fix the expected exit code for invalid/bad parameters passed to
libcgroup tools from  '255' to '129'.

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

2 years agoftests/016: fix the exit code on invalid parameters
Kamalesh Babulal [Thu, 29 Sep 2022 10:43:02 +0000 (16:13 +0530)] 
ftests/016: fix the exit code on invalid parameters

Fix the expected exit code for invalid/bad parameters passed to
libcgroup tools from '255' to '129' and '1' to '129'.

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

2 years agotools/lssubsys: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:40:59 +0000 (08:40 -0600)] 
tools/lssubsys: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/lscgroup: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:40:47 +0000 (08:40 -0600)] 
tools/lscgroup: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgconfig: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:40:28 +0000 (08:40 -0600)] 
tools/cgconfig: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgxset: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:40:17 +0000 (08:40 -0600)] 
tools/cgxset: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgxget: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:40:07 +0000 (08:40 -0600)] 
tools/cgxget: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgsnapshot: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:38:46 +0000 (08:38 -0600)] 
tools/cgsnapshot: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgcreate: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:38:31 +0000 (08:38 -0600)] 
tools/cgcreate: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgclassify: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:38:18 +0000 (08:38 -0600)] 
tools/cgclassify: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgdelete: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:38:06 +0000 (08:38 -0600)] 
tools/cgdelete: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgexec: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:37:54 +0000 (08:37 -0600)] 
tools/cgexec: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgset: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:37:43 +0000 (08:37 -0600)] 
tools/cgset: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools/cgget: use exit code 129 on invalid usage
Kamalesh Babulal [Fri, 30 Sep 2022 14:37:28 +0000 (08:37 -0600)] 
tools/cgget: use exit code 129 on invalid usage

The exit code 1 refers to general error and using -1 wraps to
255, both codes do not signify bad arguments. Let's use exit code 129
(EXIT_BADARGS) for hinting to the users about invalid usage.

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

2 years agotools: introduce bad arguments exit code
Kamalesh Babulal [Fri, 30 Sep 2022 14:37:15 +0000 (08:37 -0600)] 
tools: introduce bad arguments exit code

Introduce EXIT_BADARGS (129) error code to return, when the user passes
an invalid list of arguments. Currently, we return exit 1 which refers
to a general error, or exit -1 which wraps to 255, both codes do not
signify bad arguments. Let's use EXIT_BADARGS (exit code 129), from
tools hinting to the users about invalid usage.

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>
(cherry picked from commit 38d48493df8b5cba30b7ae29d738b11f4e1958e1)

2 years agotools/cgdelete: add check for the cmdline arguments
Kamalesh Babulal [Fri, 30 Sep 2022 14:36:59 +0000 (08:36 -0600)] 
tools/cgdelete: add check for the cmdline arguments

Like other tools, throw an error and exit if the minimum required
arguments are not passed.

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

2 years agoconfigure: introduce --enable-samples option
Kamalesh Babulal [Wed, 28 Sep 2022 15:22:47 +0000 (09:22 -0600)] 
configure: introduce --enable-samples option

Running ./bootstrap.sh step, throws bunch of warnings related to
samples/c:

samples/c/Makefile.am:23: warning: variable 'empty_cgroup_v2_SOURCES' is defined but no program or
samples/c/Makefile.am:23: library has 'empty_cgroup_v2' as canonical name (possible typo)
samples/c/Makefile.am:17: warning: variable 'get_all_controller_SOURCES' is defined but no program or
samples/c/Makefile.am:17: library has 'get_all_controller' as canonical name (possible typo)
samples/c/Makefile.am:14: warning: variable 'get_controller_SOURCES' is defined but no program or
samples/c/Makefile.am:14: library has 'get_controller' as canonical name (possible typo)
samples/c/Makefile.am:15: warning: variable 'get_mount_point_SOURCES' is defined but no program or
samples/c/Makefile.am:15: library has 'get_mount_point' as canonical name (possible typo)
samples/c/Makefile.am:20: warning: variable 'get_procs_SOURCES' is defined but no program or
samples/c/Makefile.am:20: library has 'get_procs' as canonical name (possible typo)
samples/c/Makefile.am:18: warning: variable 'get_variable_names_SOURCES' is defined but no program or
samples/c/Makefile.am:18: library has 'get_variable_names' as canonical name (possible typo)
samples/c/Makefile.am:22: warning: variable 'logger_SOURCES' is defined but no program or
samples/c/Makefile.am:22: library has 'logger' as canonical name (possible typo)
samples/c/Makefile.am:16: warning: variable 'proctest_SOURCES' is defined but no program or
samples/c/Makefile.am:16: library has 'proctest' as canonical name (possible typo)
samples/c/Makefile.am:12: warning: variable 'read_stats_SOURCES' is defined but no program or
samples/c/Makefile.am:12: library has 'read_stats' as canonical name (possible typo)
samples/c/Makefile.am:10: warning: variable 'setuid_SOURCES' is defined but no program or
samples/c/Makefile.am:10: library has 'setuid' as canonical name (possible typo)
samples/c/Makefile.am:19: warning: variable 'test_named_hierarchy_SOURCES' is defined but no program or
samples/c/Makefile.am:19: library has 'test_named_hierarchy' as canonical name (possible typo)
samples/c/Makefile.am:13: warning: variable 'walk_task_SOURCES' is defined but no program or
samples/c/Makefile.am:13: library has 'walk_task' as canonical name (possible typo)
samples/c/Makefile.am:11: warning: variable 'walk_test_SOURCES' is defined but no program or
samples/c/Makefile.am:11: library has 'walk_test' as canonical name (possible typo)
samples/c/Makefile.am:21: warning: variable 'wrapper_test_SOURCES' is defined but no program or
samples/c/Makefile.am:21: library has 'wrapper_test' as canonical name (possible typo)
src/Makefile.am: installing 'build-aux/depcomp'

fix this by introducing --enable-samples option at configure, which by
default is disabled. If the user wishes to run the sample code, they
can build them by passing the configure option.

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

2 years agoci(lint): add shell linter - Differential ShellCheck
Jan Macku [Tue, 27 Sep 2022 23:03:21 +0000 (17:03 -0600)] 
ci(lint): add shell linter - Differential ShellCheck

It performs differential ShellCheck scans and report results directly in pull request.

documentation: https://github.com/redhat-plumbers-in-action/differential-shellcheck

Signed-off-by: Jan Macku <jamacku@redhat.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit f8590647e6a901bfac455b6caac1c25363ac8a07)

2 years agoMerge pull request #249 from drakenclimber/merge-tests-3.0
Tom Hromatka [Tue, 27 Sep 2022 21:51:11 +0000 (15:51 -0600)] 
Merge pull request #249 from drakenclimber/merge-tests-3.0

Merge libcgroup-tests repo back into libcgroup repo [release-3.0]

2 years agotools/cgget: fix segfault in get_cv_value()
Kamalesh Babulal [Mon, 19 Sep 2022 13:56:09 +0000 (07:56 -0600)] 
tools/cgget: fix segfault in get_cv_value()

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)

2 years agogithub: Add more dependencies to the apt install command 249/head
Tom Hromatka [Fri, 16 Sep 2022 17:34:45 +0000 (11:34 -0600)] 
github: Add more dependencies to the apt install command

Add a few more dependencies - cmake, bison, flex, byacc, g++, autoconf,
libtool, and automake - to the apt-get install list.  Also add a '-y'
flag to automatically install them.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit dd41774db6e7a7825759ffa4040620415eb6141d)

2 years agogithub: Don't delete the tests/ subdir
Tom Hromatka [Fri, 16 Sep 2022 17:34:28 +0000 (11:34 -0600)] 
github: Don't delete the tests/ subdir

Now that the tests are part of the libcgroup git repo, don't
delete the tests/ subdirectory.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit eee4b0332e4c6c6d9074d8b17481970940dc6294)

2 years agotests: Merge libcgroup-tests repo back into libcgroup repo
Tom Hromatka [Fri, 16 Sep 2022 17:28:05 +0000 (11:28 -0600)] 
tests: Merge libcgroup-tests repo back into libcgroup repo

Merge the libcgroup-tests repo back into the main libcgroup repo.
The submodules logic has been deleted and the tests are now directly
hosted within the libcgroup repo.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agosubmodules: Delete the tests/ git submodule
Tom Hromatka [Fri, 16 Sep 2022 17:26:34 +0000 (11:26 -0600)] 
submodules: Delete the tests/ git submodule

Delete the tests/ git submodule.  The entire libcgroup-tests git
repo will be merged back into the libcgroup git repo in a subsequent
commit.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
2 years agoftests: Update the container to Ubuntu 22.04
Tom Hromatka [Thu, 15 Sep 2022 19:05:25 +0000 (13:05 -0600)] 
ftests: Update the container to Ubuntu 22.04

Switch to the latest stable Ubuntu for the functional tests.

Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
2 years agoconfigure.ac: fix bashism
Sam James [Wed, 14 Sep 2022 14:16:36 +0000 (08:16 -0600)] 
configure.ac: fix bashism

configure scripts need to be runnable with a POSIX-compliant /bin/sh.

On many (but not all!) systems, /bin/sh is provided by Bash, so errors
like this aren't spotted. Notably Debian defaults to /bin/sh provided
by dash which doesn't tolerate such bashisms as '=='.

This retains compatibility with bash.

Fixes configure warnings/errors like:
```
checking whether to build static libraries... no
./configure: 14089: test: xno: unexpected operator
checking for x86_64-pc-linux-gnu-g++... x86_64-pc-linux-gnu-g++
```

Signed-off-by: Sam James <sam@gentoo.org>
Reviewed-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit 4fc7dc1036676901d555fe296cca661a783e405b)

2 years agotools/cgsnapshot: fix wrong array size in is_ctrl_on_list()
Kamalesh Babulal [Wed, 14 Sep 2022 14:05:38 +0000 (08:05 -0600)] 
tools/cgsnapshot: fix wrong array size in is_ctrl_on_list()

GCC throws -Wstringop-overflow warning:

  CC       cgsnapshot-cgsnapshot.o
cgsnapshot.c: In function 'parse_controllers':
cgsnapshot.c:540:53: warning: 'is_ctlr_on_list' accessing 16777216 bytes in a region of size 409600 [-Wstringop-overflow=]
  540 |                         if ((!(flags & FL_LIST) || (is_ctlr_on_list(controllers, cont_names))) &&
      |     ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cgsnapshot.c:540:53: note: referencing argument 2 of type 'char (*)[4096]'
cgsnapshot.c:495:12: note: in a call to function 'is_ctlr_on_list'
  495 | static int is_ctlr_on_list(char controllers[CG_CONTROLLER_MAX][FILENAME_MAX],
      |            ^~~~~~~~~~~~~~~
cgsnapshot.c:560:37: warning: 'is_ctlr_on_list' accessing 16777216 bytes in a region of size 409600 [-Wstringop-overflow=]
  560 |         if ((!(flags & FL_LIST) || (is_ctlr_on_list(controllers, cont_names))) &&
      |                                     ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cgsnapshot.c:560:37: note: referencing argument 2 of type 'char(*)[4096]'
cgsnapshot.c:495:12: note: in a call to function 'is_ctlr_on_list'
  495 | static int is_ctlr_on_list(char controllers[CG_CONTROLLER_MAX][FILENAME_MAX],
      |            ^~~~~~~~~~~~~~~

the warning is seen due to the mismatch in the array size of the second
argument passed to is_ctlr_on_list() from parse_controllers().  Fix,
this long standing warning by chaging the size of the second function
argument in is_ctrl_on_list().

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

2 years agosrc/api.c: support /proc mounted with subset=pid
Kamalesh Babulal [Wed, 31 Aug 2022 21:09:45 +0000 (15:09 -0600)] 
src/api.c: support /proc mounted with subset=pid

/proc filesystem can be mounted with subset=pid as one of its mount
options.  This option hides all the top-level files and directories,
those are not related to processes. The cgroup v1 filesystem depends
on the /proc/cgroups to populate the cgroups controllers and will fail
during the cgroup_init() phase, when not available, whereas cgroup v2
considers this as a deprecated file and recommends reading the list of
controller from <unified mount point>/cgroup.controllers[1].

Support this valid /proc mount point only when the system is booted with
the unified mode and will fail to initialize in the case we find the
cgroup v1 mounted, i.e, the system booted with legacy or hybrid mode.

[1] https://docs.kernel.org/admin-guide/cgroup-v2.html#deprecated-v1-core-features

Fixes: https://github.com/libcgroup/libcgroup/issues/234
Reported-by: @0n-s (github username)
Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
(cherry picked from commit c83cb5a2d2ff02bb42f1db4a559ccf4d432b0419)

2 years agoapi.c: use /proc/self/mounts
Kamalesh Babulal [Wed, 31 Aug 2022 21:09:30 +0000 (15:09 -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>
(cherry picked from commit 16be308b037bbe11a54b692c227e160f1132eabe)

2 years agoconfigure: remove AM_COND for --disable-tests
Kamalesh Babulal [Wed, 31 Aug 2022 20:28:53 +0000 (14:28 -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>
(cherry picked from commit 9830b92f5a5e821aa80d350faa5bf7e54be060f4)

2 years agomake: use DIST_SUBDIRS
Kamalesh Babulal [Wed, 31 Aug 2022 20:28:35 +0000 (14:28 -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>
(cherry picked from commit 4cbf4918382f60e1bee4ff4a1021d2abd4341e8a)

2 years agogithub/workflows: add support for testing different cgroup setups
Kamalesh Babulal [Wed, 31 Aug 2022 14:31:34 +0000 (08:31 -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
(cherry picked from commit 995202c4f53fe6c7d5b90e95c58f77c7a4280d71)

2 years agoapi.c: fix file open in cg_chmod_path()
Kamalesh Babulal [Mon, 29 Aug 2022 21:08:38 +0000 (15:08 -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>
(cherry picked from commit 91cf2e4b7ceb19c02d66af717c18d7bc64fa5df9)

2 years agoapi.c: fix TOCTOU in cg_chmod_path()
Kamalesh Babulal [Wed, 24 Aug 2022 18:46:35 +0000 (12:46 -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>
(cherry picked from commit 8b9665c29cb812c255687d6e5cb5262a6fe30a40)

2 years agotools/tools-common.h: introduce CGROUP_LOG_CONT level for logging
Kamalesh Babulal [Tue, 23 Aug 2022 17:24:50 +0000 (11:24 -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
(cherry picked from commit db2039f6ad75988e0aad3f5306d5d8c02aa4b040)

2 years agolog: introduce CGROUP_LOG_CONT level for logging
Kamalesh Babulal [Tue, 23 Aug 2022 17:24:32 +0000 (11:24 -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>
(cherry picked from commit 24b5087cbf80924e50b7b20a143a81baeff69770)

3 years agodaemon/cgrulesengd: check the bytes read in cgre_receive_unix_domain_msg()
Kamalesh Babulal [Wed, 10 Aug 2022 17:13:19 +0000 (11:13 -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>
(cherry picked from commit ed283eab173addd3b5c2dd666de8f3086125e106)

3 years agoapi.c: add precision to fscanf(), in cgroup_get_current_controller_path()
Kamalesh Babulal [Wed, 10 Aug 2022 17:03:55 +0000 (11:03 -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>
(cherry picked from commit ac05eb49c498aa5047070a4620456fa7a10e1910)
TJH: Small fix in the commit comment.

3 years agoapi.c: add precision to fscanf(), in cgroup_populate_controllers()
Kamalesh Babulal [Mon, 8 Aug 2022 17:02:59 +0000 (11:02 -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>
(cherry picked from commit 04169a9bef0ee77c18cd5a2e2d9f6e49f6057e32)

3 years agoapi.c: add precision to fscanf(), in cgroup_get_all_controller_next()
Kamalesh Babulal [Mon, 8 Aug 2022 16:37:25 +0000 (10:37 -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>
(cherry picked from commit 4036f4fe4334572a4669dfece01ff24dbdd56477)

3 years agoconfigure.ac: Update version number to v3.0.0 v3.0 v3.0.0
Tom Hromatka [Thu, 4 Aug 2022 21:17:50 +0000 (15:17 -0600)] 
configure.ac: Update version number to v3.0.0

Update both the package and library version numbers to v3.0.0

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 agotest-013: add support for newer cpu.* output
Kamalesh Babulal [Tue, 19 Jul 2022 12:16:41 +0000 (17:46 +0530)] 
test-013: add support for newer cpu.* output

With Ubuntu 5.15.0-1014 kernel, there are a few changes to the output
of cgget -g cpu:<cgroup> provides for both cgroup V1 and V2:
cgroup V1:
----------
- new stat files cpu.cfs_burst_us. cpu.idle

cgroup V2:
----------
- new stat files cpu.idle, cpu.max.burst

adopt these changes while looking for expected out based on the cgroup
version. Also, convert the expected out templates into per cgroup
version list[], making it easier to match using a for loop, instead of
nested if else. Using a list also makes it easier to append any new
changes to the output template.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotest-010: add support for newer cpu.* output
Kamalesh Babulal [Tue, 19 Jul 2022 12:15:32 +0000 (17:45 +0530)] 
test-010: add support for newer cpu.* output

With Ubuntu 5.15.0-1014 kernel, there are a few changes to the output
of cgget -g cpu:<cgroup> provides for both cgroup V1 and V2:
cgroup V1:
----------
- new stat files cpu.cfs_burst_us. cpu.idle

cgroup V2:
----------
- new stat files cpu.idle, cpu.max.burst

adopt these changes while looking for expected out based on the cgroup
version. Also, convert the expected out templates into per cgroup
version list[], making it easier to match using a for loop, instead of
nested if else. Using a list also makes it easier to append any new
changes to the output template.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotest-009: add support for newer cpu.* output
Kamalesh Babulal [Tue, 19 Jul 2022 12:15:28 +0000 (17:45 +0530)] 
test-009: add support for newer cpu.* output

With Ubuntu 5.15.0-1014 kernel, there are a few changes to the output
of cgget -g cpu:<cgroup> provides for both cgroup V1 and V2:
cgroup V1:
----------
- new stat files cpu.cfs_burst_us, cpu.idle

cgroup V2:
----------
- new stat files cpu.idle, cpu.max.burst

adopt these changes while looking for expected out based on the cgroup
version. Also, convert the expected out templates into per cgroup
version list[], making it easier to match using a for loop, instead of
nested if else. Using a list also makes it easier to append any new
changes to the output template.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotest-020: fix issues on unsuccessful no-container runs
Kamalesh Babulal [Tue, 19 Jul 2022 20:48:55 +0000 (14:48 -0600)] 
test-020: fix issues on unsuccessful no-container runs

Running the test with --no-container, might cause an issue with useradd
or groupadd command if the home directory of the test user exists/test
user group exists.

The home directory of the user doesn't get removed by default on all
distros, so explicitly pass the '-r' flag to userdel to remove the
directory.  Whereas user group might exist due to unsuccessful test
runs, address it by passing '-f' flags to groupadd command, that
returns success even if the group exists, that will be removed
by the groupdel command at the exit.

This is not an issue with containers test cases, because they are
created and destroyed for every test case execution.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>
3 years agotest-019: fix issues on unsuccessful no-container runs
Kamalesh Babulal [Tue, 19 Jul 2022 20:48:39 +0000 (14:48 -0600)] 
test-019: fix issues on unsuccessful no-container runs

Running the test with --no-container, might cause an issue with useradd
or groupadd command if the home directory of the test user exists/test
user group exists.

The home directory of the user doesn't get removed by default on all
distros, so explicitly pass the '-r' flag to userdel to remove the
directory.  Whereas user group might exist due to unsuccessful test
runs, address it by passing '-f' flags to groupadd command, that
returns success even if the group exists, that will be removed
by the groupdel command at the exit.

This is not an issue with containers test cases, because they are
created and destroyed for every test case execution.

Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Signed-off-by: Tom Hromatka <tom.hromatka@oracle.com>