lkml.org 
[lkml]   [2011]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: patch] cpusets, cgroups: disallow attaching kthreadd
    On Tue, Oct 18, 2011 at 1:10 AM, Mike Galbraith <efault@gmx.de> wrote:
    >
    > Save the user some unexpected trouble, just say no.
    >
    > Signed-off-by: Mike Galbraith <efault@gmx.de>

    Acked-by: Paul Menage <paul@paulmenage.org>

    >
    > ---
    >  kernel/cpuset.c |    6 ++++--
    >  kernel/sched.c  |   10 ++++++++++
    >  2 files changed, 14 insertions(+), 2 deletions(-)
    >
    > Index: linux-3.0-tip/kernel/cpuset.c
    > ===================================================================
    > --- linux-3.0-tip.orig/kernel/cpuset.c
    > +++ linux-3.0-tip/kernel/cpuset.c
    > @@ -59,6 +59,7 @@
    >  #include <linux/mutex.h>
    >  #include <linux/workqueue.h>
    >  #include <linux/cgroup.h>
    > +#include <linux/kthread.h>
    >
    >  /*
    >  * Workqueue for cpuset related tasks.
    > @@ -1382,9 +1383,10 @@ static int cpuset_can_attach(struct cgro
    >         * set of allowed nodes is unnecessary.  Thus, cpusets are not
    >         * applicable for such threads.  This prevents checking for success of
    >         * set_cpus_allowed_ptr() on all attached tasks before cpus_allowed may
    > -        * be changed.
    > +        * be changed.  We also disallow attaching kthreadd, to prevent it's
    > +        * child from becoming trapped should it then acquire PF_THREAD_BOUND.
    >         */
    > -       if (tsk->flags & PF_THREAD_BOUND)
    > +       if (tsk->flags & PF_THREAD_BOUND || tsk == kthreadd_task)
    >                return -EINVAL;
    >
    >        return 0;
    > Index: linux-3.0-tip/kernel/sched.c
    > ===================================================================
    > --- linux-3.0-tip.orig/kernel/sched.c
    > +++ linux-3.0-tip/kernel/sched.c
    > @@ -71,6 +71,7 @@
    >  #include <linux/ctype.h>
    >  #include <linux/ftrace.h>
    >  #include <linux/slab.h>
    > +#include <linux/kthread.h>
    >
    >  #include <asm/tlb.h>
    >  #include <asm/irq_regs.h>
    > @@ -9141,6 +9142,15 @@ cpu_cgroup_destroy(struct cgroup_subsys
    >  static int
    >  cpu_cgroup_can_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
    >  {
    > +       /*
    > +        * kthreadd can fork workers for an RT workqueue in a cgroup
    > +        * which may or may not have rt_runtime allocated.  Just say no,
    > +        * as attaching a global resource to a non-root group  doesn't
    > +        * make any sense anyway.
    > +        */
    > +       if (tsk == kthreadd_task)
    > +               return -EINVAL;
    > +
    >  #ifdef CONFIG_RT_GROUP_SCHED
    >        if (!sched_rt_can_attach(cgroup_tg(cgrp), tsk))
    >                return -EINVAL;
    >
    >
    >
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-10-19 07:01    [W:0.032 / U:28.992 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site