lkml.org 
[lkml]   [2008]   [Dec]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 008/104] cgroups: fix a serious bug in cgroupstats
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Li Zefan <lizf@cn.fujitsu.com>

    commit 33d283bef23132c48195eafc21449f8ba88fce6b upstream.

    Try this, and you'll get oops immediately:
    # cd Documentation/accounting/
    # gcc -o getdelays getdelays.c
    # mount -t cgroup -o debug xxx /mnt
    # ./getdelays -C /mnt/tasks

    Because a normal file's dentry->d_fsdata is a pointer to struct cftype,
    not struct cgroup.

    After the patch, it returns EINVAL if we try to get cgroupstats
    from a normal file.

    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
    Acked-by: Paul Menage <menage@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    kernel/cgroup.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/kernel/cgroup.c
    +++ b/kernel/cgroup.c
    @@ -2045,10 +2045,13 @@ int cgroupstats_build(struct cgroupstats
    struct cgroup *cgrp;
    struct cgroup_iter it;
    struct task_struct *tsk;
    +
    /*
    - * Validate dentry by checking the superblock operations
    + * Validate dentry by checking the superblock operations,
    + * and make sure it's a directory.
    */
    - if (dentry->d_sb->s_op != &cgroup_ops)
    + if (dentry->d_sb->s_op != &cgroup_ops ||
    + !S_ISDIR(dentry->d_inode->i_mode))
    goto err;

    ret = 0;


    \
     
     \ /
      Last update: 2008-12-03 20:55    [W:0.024 / U:59.220 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site