# CPU governor (root process)
type mpdecision, domain;
type mpdecision_exec, exec_type, file_type;

# Started by init
init_daemon_domain(mpdecision)

# CPU hotplug uevent to manage cores
allow mpdecision self:netlink_kobject_uevent_socket { create setopt bind read };
allow mpdecision self:capability net_admin;

# Create under /dev/socket/mpdecision
allow mpdecision mpdecision_socket:dir w_dir_perms;
allow mpdecision mpdecision_socket:sock_file { create setattr write };

# Also support mpdecision creating the /dev/socket/pb socket
type_transition mpdecision socket_device:sock_file mpdecision_socket;
allow mpdecision self:capability chown;
allow mpdecision socket_device:dir { write add_name };

# By-product of setting owner on sock_file (don't allow)
dontaudit mpdecision self:capability fsetid;

allow mpdecision sysfs_devices_system_cpu:dir search;
allow mpdecision sysfs_devices_system_cpu:file { open read write getattr };
allow mpdecision sysfs_mpdecision:dir search;
allow mpdecision sysfs_mpdecision:file { open read write getattr };

# Some files in /sys/devices/system/cpu may pop in and out of existance,
# defeating our attempt to label them. As a result, they could have the
# sysfs label, not the sysfs_devices_system_cpu label.
# Allow write access for now until we figure out a better solution.
# For example, the following files pop in and out of existance:
# /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq
# /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
allow mpdecision sysfs:file write;

# This is needed to allow mpdecision to look at system_server's
# /proc/PID/status file.
r_dir_file(mpdecision, system_server)
