# Temperature sensor daemon (root process)
type thermald, domain, device_domain_deprecated;
type thermald_exec, exec_type, file_type;

# Started by init
init_daemon_domain(thermald)

allow thermald shared_log_device:chr_file rw_file_perms;

allow thermald self:capability { dac_override fsetid chown };

# Access to /dev/msm_thermal_query
allow thermald thermal_engine_device:chr_file rw_file_perms;

# Talk to qmuxd (/dev/socket/qmux_radio)
qmux_socket(thermald)

# Create and access to /dev/socket/thermal-.*
type_transition thermald socket_device:sock_file thermald_socket;
allow thermald socket_device:dir w_dir_perms;
allow thermald thermald_socket:sock_file create_file_perms;

allow thermald self:socket create_socket_perms;
allowxperm thermald self:socket ioctl msm_sock_ipc_ioctls;

# Writes to /sys/module/msm_thermal/core_control/cpus_offlined
allow thermald sysfs_mpdecision:file rw_file_perms;

# TODO specify specific labels for /sys/ files
allow thermald sysfs:file write;
allow thermald sysfs_usb:file write;
allow thermald sysfs_batteryinfo:file r_file_perms;
