Messages in this thread | | | Date | Tue, 17 Mar 2009 18:10:31 +0530 | From | Balbir Singh <> | Subject | Re: [PATCH -tip] cpuacct: Make cpuacct hierarchy walk in cpuacct_charge() safe when rcupreempt is used. |
| |
* Li Zefan <lizf@cn.fujitsu.com> [2009-03-17 14:28:11]:
> Bharata B Rao wrote: > > cpuacct: Make cpuacct hierarchy walk in cpuacct_charge() safe when > > rcupreempt is used. > > > > cpuacct_charge() obtains task's ca and does a hierarchy walk upwards. > > This can race with the task's movement between cgroups. This race > > can cause an access to freed ca pointer in cpuacct_charge(). This will not > > Actually it can also end up access invalid tsk->cgroups. ;) > > get tsk->cgroups (cg) > (move tsk to another cgroup) or (tsk exiting) > -> kfree(tsk->cgroups) > get cg->subsys[..] >
That problem should only occur if we dereference tsk->cgroups separately and then use that to dereference cg->subsys. Since we use task_subsys_state() and that is RCU safe, we should be OK.
-- Balbir
| |