]> git.baikalelectronics.ru Git - kernel.git/commit
cgroup: fix cgroup_rmdir() vs close(eventfd) race
authorLi Zefan <lizefan@huawei.com>
Mon, 18 Feb 2013 10:56:14 +0000 (18:56 +0800)
committerTejun Heo <tj@kernel.org>
Mon, 18 Feb 2013 17:17:24 +0000 (09:17 -0800)
commit8f8895c343ac5d5fa3a34abb9dd3dd1fd4f3af4c
tree2806f56a033f43b17ad2c547b2153941c0e77f40
parenta2ab461d9b9a1bdafd96d7210ba409aec942c221
cgroup: fix cgroup_rmdir() vs close(eventfd) race

commit c4e2e98bb5b49d739b6eca1fb589c8c3f334e18b ("cgroup: fix lockdep
warning for event_control") solved a deadlock by introducing a new
bug.

Move cgrp->event_list to a temporary list doesn't mean you can traverse
this list locklessly, because at the same time cgroup_event_wake() can
be called and remove the event from the list. The result of this race
is disastrous.

We adopt the way how kvm irqfd code implements race-free event removal,
which is now described in the comments in cgroup_event_wake().

v3:
- call eventfd_signal() no matter it's eventfd close or cgroup removal
that removes the cgroup event.

Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Li Zefan <lizefan@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup.c