* Bug in cgroup_do_mount()?
@ 2017-06-13 14:27 David Howells
[not found] ` <25030.1497364047-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
0 siblings, 1 reply; 2+ messages in thread
From: David Howells @ 2017-06-13 14:27 UTC (permalink / raw)
To: tj-DgEjT+Ai2ygdnm+yROfE0A
Cc: dhowells-H+wXaHxf7aLQT0dZR+AlfA, cgroups-u79uwXL29TY76Z2rM5mHXA
I'm having a go at converting cgroups to use my fs_context stuff, and I've
spotted a potential bug in the existing code. In cgroup_do_mount(), there is
the following snippet:
mutex_lock(&cgroup_mutex);
spin_lock_irq(&css_set_lock);
cgrp = cset_cgroup_from_root(ns->root_cset, root);
spin_unlock_irq(&css_set_lock);
mutex_unlock(&cgroup_mutex);
nsdentry = kernfs_node_dentry(cgrp->kn, dentry->d_sb);
Given that locks must be taken to call cset_cgroup_from_root(), is the value
of cgrp trustworthy once the locks are dropped?
David
^ permalink raw reply [flat|nested] 2+ messages in thread[parent not found: <25030.1497364047-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>]
* Re: Bug in cgroup_do_mount()? [not found] ` <25030.1497364047-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org> @ 2017-06-13 15:11 ` Tejun Heo 0 siblings, 0 replies; 2+ messages in thread From: Tejun Heo @ 2017-06-13 15:11 UTC (permalink / raw) To: David Howells; +Cc: cgroups-u79uwXL29TY76Z2rM5mHXA Hello, David. On Tue, Jun 13, 2017 at 03:27:27PM +0100, David Howells wrote: > I'm having a go at converting cgroups to use my fs_context stuff, and I've > spotted a potential bug in the existing code. In cgroup_do_mount(), there is > the following snippet: > > mutex_lock(&cgroup_mutex); > spin_lock_irq(&css_set_lock); > > cgrp = cset_cgroup_from_root(ns->root_cset, root); > > spin_unlock_irq(&css_set_lock); > mutex_unlock(&cgroup_mutex); > > nsdentry = kernfs_node_dentry(cgrp->kn, dentry->d_sb); > > Given that locks must be taken to call cset_cgroup_from_root(), is the value > of cgrp trustworthy once the locks are dropped? Heh, yeah, that does look suspicious. The css_set_lock is protecting the list structure itself and cgroup_mutex is required to exclude cgroup destruction and migration; however, the ns is pinning the root_cset which is immutable and in turn pins the cgroups which are associated with it, so the cgroup will stay pinned even after the mutex is dropped. The mutex lock there is to satisfy the lockdep assertion inside cset_cgroup_from_root(). We definitely should add a comment there explaining what's going on. Thanks. -- tejun ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-06-13 15:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-13 14:27 Bug in cgroup_do_mount()? David Howells
[not found] ` <25030.1497364047-S6HVgzuS8uM4Awkfq6JHfwNdhmdF6hFW@public.gmane.org>
2017-06-13 15:11 ` Tejun Heo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox