From 06c6ac43bcc9178f7d06818c1775bf311a58172b Mon Sep 17 00:00:00 2001 From: Tom Hromatka Date: Thu, 18 May 2023 07:14:55 -0600 Subject: [PATCH] config: systemd: Add a return code to cgroup_set_default_systemd_cgroup() Add a return code to cgroup_set_default_systemd_cgroup(). This is critical for users of the libcgroup C API, as they need to be certain that a default slice/scope is set. If they mistakenly think one is set when it is not, then they could erroneously operate on the root cgroup. Signed-off-by: Tom Hromatka Reviewed-by: Kamalesh Babulal --- include/libcgroup/systemd.h | 4 +++- src/config.c | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/libcgroup/systemd.h b/include/libcgroup/systemd.h index b2e55c69..ab061281 100644 --- a/include/libcgroup/systemd.h +++ b/include/libcgroup/systemd.h @@ -86,8 +86,10 @@ int cgroup_create_scope2(struct cgroup *cgroup, int ignore_ownership, * path, if available. * * The path is relative to cgroup root (default: /sys/fs/cgroup) + * + * @return 1 if a valid default slice/scope is set, 0 in all other cases */ -void cgroup_set_default_systemd_cgroup(void); +int cgroup_set_default_systemd_cgroup(void); /** * Parse the systemd delegation settings from the configuration file diff --git a/src/config.c b/src/config.c index 80c09ece..83b7a955 100644 --- a/src/config.c +++ b/src/config.c @@ -2247,7 +2247,7 @@ err: return exists; } -void cgroup_set_default_systemd_cgroup(void) +int cgroup_set_default_systemd_cgroup(void) { FILE *systemd_def_cgrp_f; size_t len; @@ -2270,12 +2270,14 @@ void cgroup_set_default_systemd_cgroup(void) if (systemd_default_cgroup_exists()) { pthread_rwlock_unlock(&systemd_default_cgroup_lock); - return; + return 1; } err: pthread_rwlock_unlock(&systemd_default_cgroup_lock); cgroup_dbg(", continuing without systemd default cgroup.\n", systemd_default_cgroup); systemd_default_cgroup[0] = '\0'; + + return 0; } #else int cgroup_add_systemd_opts(const char * const config, const char * const value) @@ -2290,5 +2292,8 @@ int cgroup_alloc_systemd_opts(const char * const config, const char * const valu void cgroup_cleanup_systemd_opts(void) { } -void cgroup_set_default_systemd_cgroup(void) { } +int cgroup_set_default_systemd_cgroup(void) +{ + return 0; +} #endif -- 2.47.2