Merge tag 'driver-core-6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / kernel / cgroup / cgroup.c
index 8f3cef1..a66c088 100644 (file)
@@ -1906,7 +1906,7 @@ int cgroup_show_path(struct seq_file *sf, struct kernfs_node *kf_node,
        len = kernfs_path_from_node(kf_node, ns_cgroup->kn, buf, PATH_MAX);
        spin_unlock_irq(&css_set_lock);
 
-       if (len >= PATH_MAX)
+       if (len == -E2BIG)
                len = -ERANGE;
        else if (len > 0) {
                seq_escape(sf, buf, " \t\n\\");
@@ -4182,20 +4182,6 @@ static struct kernfs_ops cgroup_kf_ops = {
        .seq_show               = cgroup_seqfile_show,
 };
 
-/* set uid and gid of cgroup dirs and files to that of the creator */
-static int cgroup_kn_set_ugid(struct kernfs_node *kn)
-{
-       struct iattr iattr = { .ia_valid = ATTR_UID | ATTR_GID,
-                              .ia_uid = current_fsuid(),
-                              .ia_gid = current_fsgid(), };
-
-       if (uid_eq(iattr.ia_uid, GLOBAL_ROOT_UID) &&
-           gid_eq(iattr.ia_gid, GLOBAL_ROOT_GID))
-               return 0;
-
-       return kernfs_setattr(kn, &iattr);
-}
-
 static void cgroup_file_notify_timer(struct timer_list *timer)
 {
        cgroup_file_notify(container_of(timer, struct cgroup_file,
@@ -4208,25 +4194,18 @@ static int cgroup_add_file(struct cgroup_subsys_state *css, struct cgroup *cgrp,
        char name[CGROUP_FILE_NAME_MAX];
        struct kernfs_node *kn;
        struct lock_class_key *key = NULL;
-       int ret;
 
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
        key = &cft->lockdep_key;
 #endif
        kn = __kernfs_create_file(cgrp->kn, cgroup_file_name(cgrp, cft, name),
                                  cgroup_file_mode(cft),
-                                 GLOBAL_ROOT_UID, GLOBAL_ROOT_GID,
+                                 current_fsuid(), current_fsgid(),
                                  0, cft->kf_ops, cft,
                                  NULL, key);
        if (IS_ERR(kn))
                return PTR_ERR(kn);
 
-       ret = cgroup_kn_set_ugid(kn);
-       if (ret) {
-               kernfs_remove(kn);
-               return ret;
-       }
-
        if (cft->file_offset) {
                struct cgroup_file *cfile = (void *)css + cft->file_offset;
 
@@ -5629,7 +5608,9 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,
                goto out_cancel_ref;
 
        /* create the directory */
-       kn = kernfs_create_dir(parent->kn, name, mode, cgrp);
+       kn = kernfs_create_dir_ns(parent->kn, name, mode,
+                                 current_fsuid(), current_fsgid(),
+                                 cgrp, NULL);
        if (IS_ERR(kn)) {
                ret = PTR_ERR(kn);
                goto out_stat_exit;
@@ -5774,10 +5755,6 @@ int cgroup_mkdir(struct kernfs_node *parent_kn, const char *name, umode_t mode)
         */
        kernfs_get(cgrp->kn);
 
-       ret = cgroup_kn_set_ugid(cgrp->kn);
-       if (ret)
-               goto out_destroy;
-
        ret = css_populate_dir(&cgrp->self);
        if (ret)
                goto out_destroy;
@@ -6316,7 +6293,7 @@ int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns,
                if (cgroup_on_dfl(cgrp) || !(tsk->flags & PF_EXITING)) {
                        retval = cgroup_path_ns_locked(cgrp, buf, PATH_MAX,
                                                current->nsproxy->cgroup_ns);
-                       if (retval >= PATH_MAX)
+                       if (retval == -E2BIG)
                                retval = -ENAMETOOLONG;
                        if (retval < 0)
                                goto out_unlock;