From 322e81c20f4405e985f03384e6ed329bc0d1b09c Mon Sep 17 00:00:00 2001 From: Kamalesh Babulal Date: Sun, 19 Jan 2025 11:18:02 +0530 Subject: [PATCH] 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 --- src/config.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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'; -- 2.47.3