# encryptedstore is a program that provides (encrypted) storage solution in a VM based on dm-crypt

type encryptedstore, domain, coredomain;
type encryptedstore_exec, exec_type, file_type, system_file_type;

# encryptedstore is using bootstrap bionic
use_bootstrap_libs(encryptedstore)

# encryptedstore require access to block device directory to map dm-crypt
r_dir_file(encryptedstore, block_device)

# encryptedstore accesses /dev/vd* block device file.
allow encryptedstore vd_device:blk_file rw_file_perms;

# allow encryptedstore to create dm-crypt devices
allow encryptedstore dm_device:{ chr_file blk_file } rw_file_perms;

# sys_admin is required to access the device-mapper and mount
allow encryptedstore self:global_capability_class_set sys_admin;

# encryptedstore is forked from microdroid_manager
allow encryptedstore microdroid_manager:fd use;

# For formatting encrypted storage device
allow encryptedstore e2fs_exec:file { rx_file_perms };
allowxperm encryptedstore dm_device:blk_file ioctl {
  BLKPBSZGET BLKDISCARDZEROES BLKROGET BLKDISCARD
};

# access /sys/fs/ext4/features - required because encryptedstore runs mkfs.ext4 in its own domain
allow encryptedstore sysfs_fs_ext4_features:dir search;
allow encryptedstore sysfs_fs_ext4_features:file r_file_perms;

# encryptedstore to mount on tmpfs bases directory (/mnt/)
allow encryptedstore tmpfs:dir  { add_name create mounton write };

# encryptedstore relabels the labeledfs to encryptedstore_fs, then mounts on the latter
allow encryptedstore labeledfs:filesystem { relabelfrom };
allow encryptedstore encryptedstore_fs:filesystem { mount unmount relabelto relabelfrom };

# chmod the root directory
allow encryptedstore encryptedstore_file:dir setattr;

# allow encryptedstore to log to the kernel
allow encryptedstore kmsg_device:chr_file w_file_perms;

# Allow encryptedstore to write kmsg_debug (stdio_to_kmsg).
allow encryptedstore kmsg_debug_device:chr_file w_file_perms;

# Only microdroid_manager can run encryptedstore
neverallow { domain -microdroid_manager } encryptedstore:process { transition dyntransition };
