policy_module(cgroup, 1.2.0)

########################################
#
# Declarations
#

type cgclear_t;
type cgclear_exec_t;
init_daemon_domain(cgclear_t, cgclear_exec_t)

type cgred_t;
type cgred_exec_t;
init_daemon_domain(cgred_t, cgred_exec_t)

type cgred_initrc_exec_t;
init_script_file(cgred_initrc_exec_t)

type cgred_log_t;
logging_log_file(cgred_log_t)

type cgred_var_run_t;
files_pid_file(cgred_var_run_t)

type cgrules_etc_t;
files_config_file(cgrules_etc_t)

type cgconfig_t alias cgconfigparser_t;
type cgconfig_exec_t alias cgconfigparser_exec_t;
init_daemon_domain(cgconfig_t, cgconfig_exec_t)

type cgconfig_initrc_exec_t;
init_script_file(cgconfig_initrc_exec_t)

type cgconfig_etc_t;
files_config_file(cgconfig_etc_t)

########################################
#
# cgclear local policy
#

allow cgclear_t self:capability { dac_read_search  sys_admin };

read_files_pattern(cgclear_t, cgconfig_etc_t, cgconfig_etc_t)

kernel_read_system_state(cgclear_t)

auth_use_nsswitch(cgclear_t)

domain_setpriority_all_domains(cgclear_t)

fs_manage_cgroup_dirs(cgclear_t)
fs_manage_cgroup_files(cgclear_t)
fs_unmount_cgroup(cgclear_t)

########################################
#
# cgconfig local policy
#

allow cgconfig_t self:capability { dac_read_search dac_override fowner fsetid chown sys_admin sys_tty_config };

allow cgconfig_t cgconfig_etc_t:file read_file_perms;

kernel_list_unlabeled(cgconfig_t)
kernel_read_system_state(cgconfig_t)

fs_manage_cgroup_dirs(cgconfig_t)
fs_manage_cgroup_files(cgconfig_t)
fs_mount_cgroup(cgconfig_t)
fs_mounton_cgroup(cgconfig_t)
fs_unmount_cgroup(cgconfig_t)

auth_use_nsswitch(cgconfig_t)

########################################
#
# cgred local policy
#
allow cgred_t self:capability { chown fsetid net_admin sys_admin dac_read_search  sys_ptrace };
allow cgred_t self:process signal_perms;

allow cgred_t self:netlink_socket { write bind create read };
allow cgred_t self:unix_dgram_socket { write create connect };
allow cgred_t self:netlink_connector_socket create_socket_perms;

allow cgred_t cgconfig_etc_t:file read_file_perms;
allow cgred_t cgrules_etc_t:file read_file_perms;

allow cgred_t cgred_log_t:file { append_file_perms create_file_perms setattr_file_perms };
logging_log_filetrans(cgred_t, cgred_log_t, file)

manage_files_pattern(cgred_t, cgred_var_run_t, cgred_var_run_t)
manage_sock_files_pattern(cgred_t, cgred_var_run_t, cgred_var_run_t)
files_pid_filetrans(cgred_t, cgred_var_run_t, { file sock_file })

kernel_read_all_sysctls(cgred_t)
kernel_read_system_state(cgred_t)

domain_read_all_domains_state(cgred_t)
domain_setpriority_all_domains(cgred_t)

files_getattr_all_files(cgred_t)
files_getattr_all_sockets(cgred_t)
files_read_all_symlinks(cgred_t)

fs_manage_cgroup_dirs(cgred_t)
fs_manage_cgroup_files(cgred_t)
fs_list_inotifyfs(cgred_t)

auth_use_nsswitch(cgred_t)

logging_send_syslog_msg(cgred_t)
