Skip to content
Snippets Groups Projects
  • Tejun Heo's avatar
    7af608e4
    cgroup: create dfl_root files on subsys registration · 7af608e4
    Tejun Heo authored
    
    On subsystem registration, css_populate_dir() is not called on the new
    root css, so the interface files for the subsystem on cgrp_dfl_root
    aren't created on registration.  This is a residue from the days when
    cgrp_dfl_root was used only as the parking spot for unused subsystems,
    which no longer is true as it's used as the root for cgroup2.
    
    This is often fine as later operations tend to create them as a part
    of mount (cgroup1) or subtree_control operations (cgroup2); however,
    it's not difficult to mount cgroup2 with the controller interface
    files missing as Waiman found out.
    
    Fix it by invoking css_populate_dir() on the root css on subsys
    registration.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-and-tested-by: default avatarWaiman Long <longman@redhat.com>
    Cc: stable@vger.kernel.org # v4.5+
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    7af608e4
    History
    cgroup: create dfl_root files on subsys registration
    Tejun Heo authored
    
    On subsystem registration, css_populate_dir() is not called on the new
    root css, so the interface files for the subsystem on cgrp_dfl_root
    aren't created on registration.  This is a residue from the days when
    cgrp_dfl_root was used only as the parking spot for unused subsystems,
    which no longer is true as it's used as the root for cgroup2.
    
    This is often fine as later operations tend to create them as a part
    of mount (cgroup1) or subtree_control operations (cgroup2); however,
    it's not difficult to mount cgroup2 with the controller interface
    files missing as Waiman found out.
    
    Fix it by invoking css_populate_dir() on the root css on subsys
    registration.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-and-tested-by: default avatarWaiman Long <longman@redhat.com>
    Cc: stable@vger.kernel.org # v4.5+
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
cgroup.c 138.69 KiB
/*
 *  Generic process-grouping system.
 *
 *  Based originally on the cpuset system, extracted by Paul Menage
 *  Copyright (C) 2006 Google, Inc
 *
 *  Notifications support
 *  Copyright (C) 2009 Nokia Corporation
 *  Author: Kirill A. Shutemov
 *
 *  Copyright notices from the original cpuset code:
 *  --------------------------------------------------
 *  Copyright (C) 2003 BULL SA.
 *  Copyright (C) 2004-2006 Silicon Graphics, Inc.
 *
 *  Portions derived from Patrick Mochel's sysfs code.
 *  sysfs is Copyright (c) 2001-3 Patrick Mochel
 *
 *  2003-10-10 Written by Simon Derr.
 *  2003-10-22 Updates by Stephen Hemminger.
 *  2004 May-July Rework by Paul Jackson.
 *  ---------------------------------------------------
 *
 *  This file is subject to the terms and conditions of the GNU General Public
 *  License.  See the file COPYING in the main directory of the Linux
 *  distribution for more details.
 */

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include "cgroup-internal.h"

#include <linux/cred.h>
#include <linux/errno.h>
#include <linux/init_task.h>
#include <linux/kernel.h>
#include <linux/magic.h>
#include <linux/mutex.h>
#include <linux/mount.h>
#include <linux/pagemap.h>
#include <linux/proc_fs.h>
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include <linux/sched/task.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/percpu-rwsem.h>
#include <linux/string.h>
#include <linux/hashtable.h>
#include <linux/idr.h>
#include <linux/kthread.h>
#include <linux/atomic.h>
#include <linux/cpuset.h>
#include <linux/proc_ns.h>
#include <linux/nsproxy.h>
#include <linux/file.h>
#include <net/sock.h>

#define CREATE_TRACE_POINTS
#include <trace/events/cgroup.h>

#define CGROUP_FILE_NAME_MAX		(MAX_CGROUP_TYPE_NAMELEN +	\
					 MAX_CFTYPE_NAME + 2)

/*
 * cgroup_mutex is the master lock.  Any modification to cgroup or its
 * hierarchy must be performed while holding it.
 *
 * css_set_lock protects task->cgroups pointer, the list of css_set
 * objects, and the chain of tasks off each css_set.