Message ID | 4C805293.1020305@cn.fujitsu.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Li Zefan <lizf@cn.fujitsu.com> Date: Fri, 03 Sep 2010 09:42:43 +0800 > Dave reported an rcu lockdep warning on 2.6.35.4 kernel > > task->cgroups and task->cgroups->subsys[i] are protected by RCU. > So we avoid accessing invalid pointers here. This might happen, > for example, when you are deref-ing those pointers while someone > move @task from one cgroup to another. > > Reported-by: Dave Jones <davej@redhat.com> > Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/cls_cgroup.h b/include/net/cls_cgroup.h index dd1fdb8..a4dc5b0 100644 --- a/include/net/cls_cgroup.h +++ b/include/net/cls_cgroup.h @@ -27,11 +27,17 @@ struct cgroup_cls_state #ifdef CONFIG_NET_CLS_CGROUP static inline u32 task_cls_classid(struct task_struct *p) { + int classid; + if (in_interrupt()) return 0; - return container_of(task_subsys_state(p, net_cls_subsys_id), - struct cgroup_cls_state, css)->classid; + rcu_read_lock(); + classid = container_of(task_subsys_state(p, net_cls_subsys_id), + struct cgroup_cls_state, css)->classid; + rcu_read_unlock(); + + return classid; } #else extern int net_cls_subsys_id;
Dave reported an rcu lockdep warning on 2.6.35.4 kernel task->cgroups and task->cgroups->subsys[i] are protected by RCU. So we avoid accessing invalid pointers here. This might happen, for example, when you are deref-ing those pointers while someone move @task from one cgroup to another. Reported-by: Dave Jones <davej@redhat.com> Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> --- include/net/cls_cgroup.h | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)