# allow mediaserver to communicate with cnd
unix_socket_connect(mediaserver, cnd, cnd)

allow mediaserver camera_device:chr_file rw_file_perms;
unix_socket_send(mediaserver, camera, mm-qcamerad)

allow mediaserver tee_device:chr_file rw_file_perms;
allow mediaserver qdsp_device:chr_file r_file_perms;

allow mediaserver self:socket create_socket_perms;

binder_call(mediaserver, rild)

qmux_socket(mediaserver)
allow mediaserver camera_data_file:sock_file write;
userdebug_or_eng(`
  allow mediaserver camera_data_file:dir rw_dir_perms;
  allow mediaserver camera_data_file:file create_file_perms;
')

allow mediaserver sysfs_esoc:dir r_dir_perms;
allow mediaserver sysfs_esoc:lnk_file read;
allow mediaserver system_app_data_file:file rw_file_perms;
# access to perflock
allow mediaserver mpctl_socket:dir r_dir_perms;
unix_socket_send(mediaserver, mpctl, mpdecision)
unix_socket_connect(mediaserver, mpctl, mpdecision)

# access to perflock
allow mediaserver mpctl_socket:dir r_dir_perms;
unix_socket_send(mediaserver, mpctl, perfd)
unix_socket_connect(mediaserver, mpctl, perfd)

# for thermal sock files
unix_socket_connect(mediaserver, thermal, thermal-engine)

#allow mediaserver to communicate with timedaemon
allow mediaserver time_daemon:unix_stream_socket connectto;
