Selaa lähdekoodia

cgroup: fix unbalanced locking

cgroup_pidlist_start() holds cgrp->pidlist_mutex and then calls
pidlist_array_load(), and cgroup_pidlist_stop() releases the mutex.

It is wrong that we release the mutex in the failure path in
pidlist_array_load(), because cgroup_pidlist_stop() will be called
no matter if cgroup_pidlist_start() returns errno or not.

Fixes: 4bac00d16a8760eae7205e41d2c246477d42a210
Cc: <stable@vger.kernel.org> # 3.14+
Signed-off-by: Zefan Li <lizefan@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
Zefan Li 11 vuotta sitten
vanhempi
commit
eb4aec84d6
1 muutettua tiedostoa jossa 0 lisäystä ja 1 poistoa
  1. 0 1
      kernel/cgroup.c

+ 0 - 1
kernel/cgroup.c

@@ -3985,7 +3985,6 @@ static int pidlist_array_load(struct cgroup *cgrp, enum cgroup_filetype type,
 
 
 	l = cgroup_pidlist_find_create(cgrp, type);
 	l = cgroup_pidlist_find_create(cgrp, type);
 	if (!l) {
 	if (!l) {
-		mutex_unlock(&cgrp->pidlist_mutex);
 		pidlist_free(array);
 		pidlist_free(array);
 		return -ENOMEM;
 		return -ENOMEM;
 	}
 	}