cpuset: Add allow_attach hook for cpusets on android.
[firefly-linux-kernel-4.4.55.git] / kernel / cpuset.c
index 11eaf14b52c2919b63131485d33dd2e7203aca58..a65d634634203f784e720e940e4880181e28e22e 100644 (file)
@@ -2074,12 +2074,30 @@ static void cpuset_bind(struct cgroup_subsys_state *root_css)
        mutex_unlock(&cpuset_mutex);
 }
 
+static int cpuset_allow_attach(struct cgroup_taskset *tset)
+{
+       const struct cred *cred = current_cred(), *tcred;
+       struct task_struct *task;
+       struct cgroup_subsys_state *css;
+
+       cgroup_taskset_for_each(task, css, tset) {
+               tcred = __task_cred(task);
+
+               if ((current != task) && !capable(CAP_SYS_ADMIN) &&
+                    cred->euid.val != tcred->uid.val && cred->euid.val != tcred->suid.val)
+                       return -EACCES;
+       }
+
+       return 0;
+}
+
 struct cgroup_subsys cpuset_cgrp_subsys = {
        .css_alloc      = cpuset_css_alloc,
        .css_online     = cpuset_css_online,
        .css_offline    = cpuset_css_offline,
        .css_free       = cpuset_css_free,
        .can_attach     = cpuset_can_attach,
+       .allow_attach   = cpuset_allow_attach,
        .cancel_attach  = cpuset_cancel_attach,
        .attach         = cpuset_attach,
        .post_attach    = cpuset_post_attach,