# remote storage process (runs as nobody)
type rmt, domain, device_domain_deprecated;
type rmt_exec, exec_type, file_type;

# Started by init
init_daemon_domain(rmt)

# Drop (user, group) to (nobody, nobody)
allow rmt self:capability { setuid setgid dac_override setpcap net_raw };

# opens and reads /dev/block/mmcblk0
allow rmt root_block_device:blk_file r_file_perms;

# Allow reads/writes to modem related block devices
allow rmt modem_block_device:blk_file rw_file_perms;
allow rmt block_device:dir r_dir_perms;
allow rmt cgroup:dir { create add_name };
allow rmt smem_log_device:chr_file rw_file_perms;

# Needed for ioprio_set(IOPRIO_WHO_PROCESS, 0, IOPRIO_CLASS_RT << IOPRIO_CLASS_SHIFT);
allow rmt self:capability sys_admin;

allow rmt ssd_block_device:blk_file rw_file_perms;

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

# Wake lock access
wakelock_use(rmt)

# Allow access to /dev/uio0.
allow rmt uio_device:chr_file rw_file_perms;

allow rmt mmc_block_device:blk_file r_file_perms;
