From: Kamalesh Babulal Date: Sun, 19 Jan 2025 05:48:02 +0000 (+0530) Subject: src/config: Fix data race reported by Coverity X-Git-Tag: v3.2.0~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=322e81c20f4405e985f03384e6ed329bc0d1b09c;p=thirdparty%2Flibcgroup.git src/config: Fix data race reported by Coverity Fix the following data race issue reported by Coverity: CID 465888:Check of thread-shared field evades lock acquisition (LOCK_EVASION): "The data guarded by this critical section may be read while in an inconsistent state or modified by multiple racing threads. In cgroup_config_insert_into_namespace_table: Checking the value of a thread-shared field outside of a locked region to determine if a locked operation involving that thread shared field has completed." Fix it by moving the namespace_table_index value check too under the namespace_table_lock Signed-off-by: Kamalesh Babulal Signed-off-by: Tom Hromatka --- diff --git a/src/config.c b/src/config.c index b489b668..b47a44d6 100644 --- a/src/config.c +++ b/src/config.c @@ -599,11 +599,13 @@ int cgroup_config_insert_into_namespace_table(char *name, char *nspath) { char *ns_tbl_name, *ns_tbl_path; - if (namespace_table_index >= CG_CONTROLLER_MAX) - return 0; - pthread_rwlock_wrlock(&namespace_table_lock); + if (namespace_table_index >= CG_CONTROLLER_MAX) { + pthread_rwlock_unlock(&namespace_table_lock); + return 0; + } + ns_tbl_name = config_namespace_table[namespace_table_index].name; strncpy(ns_tbl_name, name, CONTROL_NAMELEN_MAX - 1); ns_tbl_name[CONTROL_NAMELEN_MAX - 1] = '\0';