lkml.org 
[lkml]   [2010]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2.6.34-rc5 10/12] sched: Fix an RCU warning in print_task()
    Date
    From: Li Zefan <lizf@cn.fujitsu.com>

    With CONFIG_PROVE_RCU=y, a warning can be triggered:

    $ cat /proc/sched_debug

    ...
    kernel/cgroup.c:1649 invoked rcu_dereference_check() without protection!
    ...

    Both cgroup_path() and task_group() should be called with either
    rcu_read_lock or cgroup_mutex held.

    The rcu_dereference_check() does include cgroup_lock_is_held(), so we
    know that this lock is not held. Therefore, in a CONFIG_PREEMPT kernel,
    to say nothing of a CONFIG_PREEMPT_RT kernel, the original code could
    have ended up copying a string out of the freelist.

    This patch inserts RCU read-side primitives needed to prevent this
    scenario.

    Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    ---
    kernel/sched_debug.c | 2 ++
    1 files changed, 2 insertions(+), 0 deletions(-)

    diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c
    index 9b49db1..19be00b 100644
    --- a/kernel/sched_debug.c
    +++ b/kernel/sched_debug.c
    @@ -114,7 +114,9 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
    {
    char path[64];

    + rcu_read_lock();
    cgroup_path(task_group(p)->css.cgroup, path, sizeof(path));
    + rcu_read_unlock();
    SEQ_printf(m, " %s", path);
    }
    #endif
    --
    1.7.0


    \
     
     \ /
      Last update: 2010-04-23 21:49    [W:0.021 / U:0.572 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site