| # microdroid_manager is a daemon running in the microdroid. |
| |
| type microdroid_manager, domain, coredomain; |
| type microdroid_manager_exec, exec_type, file_type, system_file_type; |
| |
| # allow domain transition from init |
| init_daemon_domain(microdroid_manager) |
| |
| # Allow microdroid_manager to set boot status |
| set_prop(microdroid_manager, boot_status_prop) |
| |
| # microdroid_manager accesses a virtual disk block device to read VM payload |
| # It needs write access as it updates the instance image |
| allow microdroid_manager block_device:dir r_dir_perms; |
| allow microdroid_manager block_device:lnk_file r_file_perms; |
| allow microdroid_manager vd_device:blk_file rw_file_perms; |
| # microdroid_manager verifies DM-verity mounted APK payload |
| allow microdroid_manager dm_device:blk_file r_file_perms; |
| |
| # microdroid_manager can query AVF flags in the device tree |
| r_dir_file(microdroid_manager, proc_dt_avf) |
| r_dir_file(microdroid_manager, sysfs_dt_avf) |
| |
| # Read config from the open-dice driver. |
| allow microdroid_manager open_dice_device:chr_file rw_file_perms; |
| |
| # Block crash dumps to ensure the DICE secrets are not leaked. |
| typeattribute microdroid_manager no_crash_dump_domain; |
| |
| # Allow microdroid_manager to do blkflsbuf on instance disk image. The ioctl |
| # requires sys_admin cap as well. |
| allowxperm microdroid_manager vd_device:blk_file ioctl BLKFLSBUF; |
| allow microdroid_manager self:global_capability_class_set sys_admin; |
| |
| # Allow microdroid_manager to remove capabilities from it's capability bounding set. |
| allow microdroid_manager self:global_capability_class_set setpcap; |
| |
| # Allow microdroid_manager to start payload tasks in a different uid/gid. |
| domain_auto_trans(microdroid_manager, microdroid_app_exec, microdroid_app) |
| domain_auto_trans(microdroid_manager, compos_exec, compos) |
| allow microdroid_manager self:global_capability_class_set { setuid setgid }; |
| |
| # Allow microdroid_manager to start apk verity binaries |
| domain_auto_trans(microdroid_manager, apkdmverity_exec, apkdmverity) |
| domain_auto_trans(microdroid_manager, zipfuse_exec, zipfuse) |
| |
| # Allow microdroid_manager to start encryptedstore binary |
| domain_auto_trans(microdroid_manager, encryptedstore_exec, encryptedstore) |
| |
| # Microdroid Manager needs read related permission for syncing encrypted storage fs |
| allow microdroid_manager encryptedstore_file:dir r_dir_perms; |
| |
| # Allow microdroid_manager to run kexec to load crashkernel |
| domain_auto_trans(microdroid_manager, kexec_exec, kexec) |
| |
| # Let microdroid_manager kernel-log. |
| allow microdroid_manager kmsg_device:chr_file w_file_perms; |
| |
| # Let microdroid_manager to create a vsock connection back to the host VM |
| allow microdroid_manager self:vsock_socket { create_socket_perms_no_ioctl }; |
| |
| # Allow microdroid_manager to read the CID of the VM. |
| allow microdroid_manager vsock_device:chr_file { ioctl open read }; |
| |
| # microdroid_manager is using bootstrap bionic |
| use_bootstrap_libs(microdroid_manager) |
| |
| # microdroid_manager create /apex/vm-payload-metadata for apexd |
| # TODO(b/199371341) create a new label for the file so that only microdroid_manager can create it. |
| allow microdroid_manager apex_mnt_dir:dir w_dir_perms; |
| allow microdroid_manager apex_mnt_dir:file create_file_perms; |
| |
| # Allow microdroid_manager to start various services |
| set_prop(microdroid_manager, ctl_apexd_vm_prop) |
| set_prop(microdroid_manager, ctl_apkdmverity_prop) |
| set_prop(microdroid_manager, ctl_authfs_prop) |
| set_prop(microdroid_manager, ctl_seriallogging_prop) |
| set_prop(microdroid_manager, ctl_zipfuse_prop) |
| |
| # Allow microdroid_manager to wait for linkerconfig to be ready |
| get_prop(microdroid_manager, apex_config_prop) |
| |
| # Allow microdroid_manager to wait for zipfuse to be ready |
| get_prop(microdroid_manager, microdroid_manager_zipfuse_prop) |
| |
| # Allow microdroid_manager to pass the roothash to apkdmverity |
| set_prop(microdroid_manager, microdroid_manager_roothash_prop) |
| |
| # Allow microdroid_manager to set sysprops calculated from the payload config |
| set_prop(microdroid_manager, microdroid_config_prop) |
| |
| # Allow microdroid_manager to set sysprops related to microdroid_lifecycle (ex. init_done) |
| set_prop(microdroid_manager, microdroid_lifecycle_prop) |
| |
| # Allow microdroid_manager to shutdown the device when verification fails |
| set_prop(microdroid_manager, powerctl_prop) |
| |
| # Allow microdroid_manager to read bootconfig so that it can reject a bootconfig |
| # that is different from what is recorded in the instance.img file. |
| allow microdroid_manager proc_bootconfig:file r_file_perms; |
| |
| # microdroid_manager needs to read /proc/cmdline to see if crashkernel= parameter is set |
| # or not; if set, it executes kexec to load the crashkernel into memory. |
| allow microdroid_manager proc_cmdline:file r_file_perms; |
| |
| # microdroid_manager needs to read /proc/stat and /proc_meminfo to collect CPU & memory usage |
| # for creating atoms used in AVF telemetry metrics |
| allow microdroid_manager proc_meminfo:file r_file_perms; |
| allow microdroid_manager proc_stat:file r_file_perms; |
| |
| # Allow microdroid_manager to set up zram-backed swap: |
| # - Read & Write zram properties in sysfs to set/get zram disksize |
| # - Read & Write to zram block device needed for mkswap and swapon |
| allow microdroid_manager sysfs_zram:dir { search }; |
| allow microdroid_manager sysfs_zram:file rw_file_perms; |
| allow microdroid_manager ram_device:blk_file rw_file_perms; |
| |
| # Allow microdroid_manager to read/write failure serial device |
| allow microdroid_manager serial_device:chr_file w_file_perms; |
| |
| # Allow microdroid_manager to handle extra_apks |
| allow microdroid_manager extra_apk_file:dir create_dir_perms; |
| |
| # Allow microdroid_manager to write kmsg_debug (stdio_to_kmsg). |
| allow microdroid_manager kmsg_debug_device:chr_file w_file_perms; |
| |
| # Domains other than microdroid can't write extra_apks |
| neverallow { domain -microdroid_manager -init -vendor_init } extra_apk_file:file no_w_file_perms; |
| neverallow { domain -microdroid_manager -init -vendor_init } extra_apk_file:dir no_w_dir_perms; |
| |
| # Only microdroid_payload and a few other critical binaries can be run by microdroid_manager, |
| # in their own domains. |
| neverallow microdroid_manager { file_type fs_type }:file execute_no_trans; |
| neverallow microdroid_manager { |
| domain |
| -crash_dump |
| -microdroid_payload |
| -apkdmverity |
| -encryptedstore |
| -zipfuse |
| -kexec |
| }:process transition; |