From: Kamalesh Babulal Date: Sun, 26 Jan 2025 06:01:25 +0000 (+0530) Subject: config: Fix data race reported in cgroup_config_insert_into_mount_table X-Git-Tag: v3.2.0~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4bc68c302acdb44540e521093bd47b5d48688f8;p=thirdparty%2Flibcgroup.git config: Fix data race reported in cgroup_config_insert_into_mount_table Fix the following data race issue reported by Coverity: CID 465888: (#1 of 1): 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_mount_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 config_table_index value check too under the config_table_lock. Signed-off-by: Kamalesh Babulal Signed-off-by: Tom Hromatka --- diff --git a/src/config.c b/src/config.c index b47a44d6..afaf9aad 100644 --- a/src/config.c +++ b/src/config.c @@ -551,11 +551,13 @@ int cgroup_config_insert_into_mount_table(char *name, char *mount_point) { int i; - if (config_table_index >= CG_CONTROLLER_MAX) - return 0; - pthread_rwlock_wrlock(&config_table_lock); + if (config_table_index >= CG_CONTROLLER_MAX) { + pthread_rwlock_unlock(&config_table_lock); + return 0; + } + /* Merge controller names with the same mount point */ for (i = 0; i < config_table_index; i++) { if (strcmp(config_mount_table[i].mount.path, mount_point) == 0) {