type location, domain;
type location_exec, exec_type, file_type;

# Started by init
init_daemon_domain(location)

allow location location_exec:file rx_file_perms;

allow location self:capability { setuid setgid net_raw };

allow location self:socket create_socket_perms;

binder_use(location)
binder_call(location, system_server)
allow location sensorservice_service:service_manager find;

allow location system_server:unix_stream_socket { read write };

# slim_daemon
allow location sysfs_msm_subsys:dir r_dir_perms;
allow location sysfs_msm_subsys:lnk_file rw_file_perms;

qmux_socket(location)
