Stephen Smalley | 2dd4e51 | 2012-01-04 12:33:27 -0500 | [diff] [blame] | 1 | # volume manager |
| 2 | type vold, domain; |
| 3 | type vold_exec, exec_type, file_type; |
| 4 | |
| 5 | init_daemon_domain(vold) |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 6 | |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 7 | # Switch to more restrictive domains when executing common tools |
| 8 | domain_auto_trans(vold, sgdisk_exec, sgdisk); |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 9 | domain_auto_trans(vold, sdcardd_exec, sdcardd); |
Jeff Sharkey | 84e1c61 | 2015-04-01 10:15:51 -0700 | [diff] [blame] | 10 | |
| 11 | # For a handful of probing tools, we choose an even more restrictive |
| 12 | # domain when working with untrusted block devices |
| 13 | domain_trans(vold, shell_exec, blkid); |
| 14 | domain_trans(vold, shell_exec, blkid_untrusted); |
| 15 | domain_trans(vold, fsck_exec, fsck); |
| 16 | domain_trans(vold, fsck_exec, fsck_untrusted); |
| 17 | |
| 18 | # Allow us to jump into execution domains of above tools |
| 19 | allow vold self:process setexec; |
| 20 | |
| 21 | # For sgdisk launched through popen() |
| 22 | allow vold shell_exec:file rx_file_perms; |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 23 | |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 24 | typeattribute vold mlstrustedsubject; |
Stephen Smalley | 273d7ea | 2014-09-30 11:37:51 -0400 | [diff] [blame] | 25 | allow vold self:process setfscreate; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 26 | allow vold system_file:file x_file_perms; |
| 27 | allow vold block_device:dir create_dir_perms; |
| 28 | allow vold block_device:blk_file create_file_perms; |
Stephen Smalley | 273d7ea | 2014-09-30 11:37:51 -0400 | [diff] [blame] | 29 | auditallow vold block_device:blk_file create_file_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 30 | allow vold device:dir write; |
| 31 | allow vold devpts:chr_file rw_file_perms; |
| 32 | allow vold rootfs:dir mounton; |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 33 | allow vold sdcard_type:dir mounton; # TODO: deprecated in M |
| 34 | allow vold sdcard_type:filesystem { mount remount unmount }; # TODO: deprecated in M |
| 35 | allow vold sdcard_type:dir create_dir_perms; # TODO: deprecated in M |
| 36 | allow vold sdcard_type:file create_file_perms; # TODO: deprecated in M |
Ricardo Cerqueira | 1d7bc1d | 2015-06-16 02:17:56 +0100 | [diff] [blame] | 37 | ifelse(shipping_build, `true', , |
| 38 | allow vold sdcard_posix:filesystem { relabelto relabelfrom }; |
| 39 | ) |
Michael Bestas | 149ccab | 2014-12-13 20:51:20 +0200 | [diff] [blame] | 40 | allow vold labeledfs:filesystem { relabelfrom }; |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 41 | |
| 42 | # Manage locations where storage is mounted |
| 43 | allow vold { mnt_media_rw_file storage_file sdcard_type }:dir create_dir_perms; |
| 44 | allow vold { mnt_media_rw_file storage_file sdcard_type }:file create_file_perms; |
| 45 | |
Jeff Sharkey | 90c6454 | 2015-04-24 15:19:22 -0700 | [diff] [blame] | 46 | # Access to storage that backs emulated FUSE daemons for migration optimization |
| 47 | allow vold media_rw_data_file:dir create_dir_perms; |
| 48 | allow vold media_rw_data_file:file create_file_perms; |
| 49 | |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 50 | # Newly created storage dirs are always treated as mount stubs to prevent us |
| 51 | # from accidentally writing when the mount point isn't present. |
| 52 | type_transition vold storage_file:dir storage_stub_file; |
| 53 | type_transition vold mnt_media_rw_file:dir mnt_media_rw_stub_file; |
| 54 | |
| 55 | # Allow mounting of storage devices |
| 56 | allow vold { mnt_media_rw_stub_file storage_stub_file }:dir { mounton create rmdir getattr setattr }; |
| 57 | allow vold sdcard_type:filesystem { mount unmount remount }; |
| 58 | |
| 59 | # Manage per-user primary symlinks |
| 60 | allow vold mnt_user_file:dir create_dir_perms; |
| 61 | allow vold mnt_user_file:lnk_file create_file_perms; |
| 62 | |
Jeff Sharkey | 73d9c2a | 2015-04-06 16:21:54 -0700 | [diff] [blame] | 63 | # Allow to create and mount expanded storage |
| 64 | allow vold mnt_expand_file:dir { create_dir_perms mounton }; |
| 65 | allow vold apk_data_file:dir { create getattr setattr }; |
Jeff Sharkey | 73d9c2a | 2015-04-06 16:21:54 -0700 | [diff] [blame] | 66 | allow vold shell_data_file:dir { create getattr setattr }; |
| 67 | |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 68 | allow vold tmpfs:filesystem { mount unmount }; |
| 69 | allow vold tmpfs:dir create_dir_perms; |
| 70 | allow vold tmpfs:dir mounton; |
Alex Klyubin | b25fe91 | 2013-07-08 15:48:36 -0700 | [diff] [blame] | 71 | allow vold self:capability { net_admin dac_override mknod sys_admin chown fowner fsetid }; |
Stephen Smalley | 1601132 | 2014-02-24 15:06:11 -0500 | [diff] [blame] | 72 | allow vold self:netlink_kobject_uevent_socket create_socket_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 73 | allow vold app_data_file:dir search; |
| 74 | allow vold app_data_file:file rw_file_perms; |
Stephen Smalley | 273d7ea | 2014-09-30 11:37:51 -0400 | [diff] [blame] | 75 | allow vold loop_device:blk_file create_file_perms; |
| 76 | allow vold vold_device:blk_file create_file_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 77 | allow vold dm_device:chr_file rw_file_perms; |
Stephen Smalley | 273d7ea | 2014-09-30 11:37:51 -0400 | [diff] [blame] | 78 | allow vold dm_device:blk_file rw_file_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 79 | # For vold Process::killProcessesWithOpenFiles function. |
| 80 | allow vold domain:dir r_dir_perms; |
| 81 | allow vold domain:{ file lnk_file } r_file_perms; |
| 82 | allow vold domain:process { signal sigkill }; |
Geremy Condra | 7eb786b | 2013-09-11 10:16:57 -0700 | [diff] [blame] | 83 | allow vold self:capability { sys_ptrace kill }; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 84 | |
| 85 | # XXX Label sysfs files with a specific type? |
| 86 | allow vold sysfs:file rw_file_perms; |
| 87 | |
Nick Kralevich | e265197 | 2015-06-06 07:42:37 -0700 | [diff] [blame] | 88 | allow vold kmsg_device:chr_file rw_file_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 89 | |
Stephen Smalley | cedee69 | 2014-09-30 13:09:55 -0400 | [diff] [blame] | 90 | # Run fsck. |
| 91 | allow vold fsck_exec:file rx_file_perms; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 92 | |
Nick Kralevich | 3753c81 | 2013-12-19 15:23:43 -0800 | [diff] [blame] | 93 | # Log fsck results |
| 94 | allow vold fscklogs:dir rw_dir_perms; |
| 95 | allow vold fscklogs:file create_file_perms; |
| 96 | |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 97 | # |
| 98 | # Rules to support encrypted fs support. |
| 99 | # |
| 100 | |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 101 | # Unmount and mount the fs. |
| 102 | allow vold labeledfs:filesystem { mount unmount remount }; |
| 103 | |
| 104 | # Access /efs/userdata_footer. |
| 105 | # XXX Split into a separate type? |
| 106 | allow vold efs_file:file rw_file_perms; |
| 107 | |
Jeff Sharkey | 73d9c2a | 2015-04-06 16:21:54 -0700 | [diff] [blame] | 108 | # Create and mount on /data/tmp_mnt and management of expansion mounts |
| 109 | allow vold system_data_file:dir { create rw_dir_perms mounton setattr rmdir }; |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 110 | |
| 111 | # Set scheduling policy of kernel processes |
| 112 | allow vold kernel:process setsched; |
| 113 | |
| 114 | # Property Service |
William Roberts | 2f5a6a9 | 2015-05-04 18:22:45 -0700 | [diff] [blame] | 115 | set_prop(vold, vold_prop) |
| 116 | set_prop(vold, powerctl_prop) |
| 117 | set_prop(vold, ctl_fuse_prop) |
Jeff Sharkey | 7617cd4 | 2015-06-09 11:01:04 -0700 | [diff] [blame] | 118 | set_prop(vold, restorecon_prop) |
Nick Kralevich | 7914a47 | 2013-06-28 20:15:37 -0700 | [diff] [blame] | 119 | |
| 120 | # ASEC |
| 121 | allow vold asec_image_file:file create_file_perms; |
| 122 | allow vold asec_image_file:dir rw_dir_perms; |
| 123 | security_access_policy(vold) |
Jeff Sharkey | f063f46 | 2015-03-27 11:25:39 -0700 | [diff] [blame] | 124 | allow vold asec_apk_file:dir { create_dir_perms mounton relabelfrom relabelto }; |
Robert Craig | 48b1883 | 2014-02-04 11:36:41 -0500 | [diff] [blame] | 125 | allow vold asec_public_file:dir { relabelto setattr }; |
Stephen Smalley | f85c1fc | 2014-05-27 10:56:24 -0400 | [diff] [blame] | 126 | allow vold asec_apk_file:file { r_file_perms setattr relabelfrom relabelto }; |
Robert Craig | 48b1883 | 2014-02-04 11:36:41 -0500 | [diff] [blame] | 127 | allow vold asec_public_file:file { relabelto setattr }; |
Stephen Smalley | f85c1fc | 2014-05-27 10:56:24 -0400 | [diff] [blame] | 128 | # restorecon files in asec containers created on 4.2 or earlier. |
| 129 | allow vold unlabeled:dir { r_dir_perms setattr relabelfrom }; |
| 130 | allow vold unlabeled:file { r_file_perms setattr relabelfrom }; |
Nick Kralevich | 3753c81 | 2013-12-19 15:23:43 -0800 | [diff] [blame] | 131 | |
| 132 | # Handle wake locks (used for device encryption) |
Nick Kralevich | 8599e34 | 2014-05-23 13:33:32 -0700 | [diff] [blame] | 133 | wakelock_use(vold) |
Paul Lawrence | 01ba683 | 2014-03-19 14:41:00 -0700 | [diff] [blame] | 134 | |
| 135 | # talk to batteryservice |
| 136 | binder_use(vold) |
| 137 | binder_call(vold, healthd) |
Paul Lawrence | d756711 | 2014-04-14 12:05:43 -0700 | [diff] [blame] | 138 | |
| 139 | # talk to keymaster |
| 140 | allow vold tee_device:chr_file rw_file_perms; |
| 141 | |
Stephen Smalley | 887d7af | 2014-09-11 08:50:04 -0400 | [diff] [blame] | 142 | # Access userdata block device. |
| 143 | allow vold userdata_block_device:blk_file rw_file_perms; |
| 144 | auditallow vold userdata_block_device:blk_file rw_file_perms; |
| 145 | |
Ravi Kumar Siddojigari | 077da1c | 2014-11-19 17:32:24 +0530 | [diff] [blame] | 146 | # For UMS tuning |
| 147 | allow vold proc_dirty_ratio:file rw_file_perms; |
| 148 | |
Stephen Smalley | 273d7ea | 2014-09-30 11:37:51 -0400 | [diff] [blame] | 149 | # Access metadata block device used for encryption meta-data. |
| 150 | allow vold metadata_block_device:blk_file rw_file_perms; |
Paul Lawrence | 38af1da | 2015-03-11 15:44:14 -0700 | [diff] [blame] | 151 | |
Paul Lawrence | e2c0c9d | 2015-04-28 22:06:29 +0000 | [diff] [blame] | 152 | # Allow vold to manipulate /data/unencrypted |
| 153 | allow vold unencrypted_data_file:{ file } create_file_perms; |
Paul Lawrence | 38af1da | 2015-03-11 15:44:14 -0700 | [diff] [blame] | 154 | allow vold unencrypted_data_file:dir create_dir_perms; |
Jeff Sharkey | 4423ecd | 2015-03-31 15:03:13 -0700 | [diff] [blame] | 155 | |
Jeff Sharkey | c960596 | 2015-05-14 20:55:31 -0700 | [diff] [blame] | 156 | # Write to /proc/sys/vm/drop_caches |
| 157 | allow vold proc_drop_caches:file w_file_perms; |
| 158 | |
Jeff Sharkey | 4423ecd | 2015-03-31 15:03:13 -0700 | [diff] [blame] | 159 | # Give vold a place where only vold can store files; everyone else is off limits |
Jeff Sharkey | c960596 | 2015-05-14 20:55:31 -0700 | [diff] [blame] | 160 | allow vold vold_data_file:dir create_dir_perms; |
Jeff Sharkey | 4423ecd | 2015-03-31 15:03:13 -0700 | [diff] [blame] | 161 | allow vold vold_data_file:file create_file_perms; |
| 162 | |
Paul Lawrence | e2c0c9d | 2015-04-28 22:06:29 +0000 | [diff] [blame] | 163 | # linux keyring configuration |
| 164 | allow vold init:key { write search setattr }; |
| 165 | allow vold vold:key { write search setattr }; |
| 166 | |
Jeff Sharkey | 769b96f | 2015-06-11 13:00:30 -0700 | [diff] [blame] | 167 | # vold temporarily changes its priority when running benchmarks |
| 168 | allow vold self:capability sys_nice; |
| 169 | |
Jeff Sharkey | 6b75d09 | 2015-06-25 16:13:59 -0700 | [diff] [blame] | 170 | # vold needs to chroot into app namespaces to remount when runtime permissions change |
| 171 | allow vold self:capability sys_chroot; |
| 172 | allow vold storage_file:dir mounton; |
| 173 | |
Adnan Begovic | 442c3eb | 2015-10-15 13:06:44 -0700 | [diff] [blame^] | 174 | ifelse(shipping_build, `true', |
| 175 | `neverallow { domain -vold } vold_data_file:dir ~{ open create read getattr setattr search relabelto ioctl }; |
| 176 | neverallow { domain -vold } vold_data_file:notdevfile_class_set ~{ relabelto getattr }; |
| 177 | neverallow { domain -vold -init } vold_data_file:dir *; |
| 178 | neverallow { domain -vold -init } vold_data_file:notdevfile_class_set *; |
| 179 | neverallow { domain -vold -init } restorecon_prop:property_service set;' |
| 180 | , |
| 181 | `neverallow { domain -vold -recovery } vold_data_file:dir ~{ open create read getattr setattr search relabelto ioctl }; |
| 182 | neverallow { domain -vold -recovery } vold_data_file:notdevfile_class_set ~{ relabelto getattr }; |
| 183 | neverallow { domain -vold -init -recovery } vold_data_file:dir *; |
| 184 | neverallow { domain -vold -init -recovery } vold_data_file:notdevfile_class_set *; |
| 185 | neverallow { domain -vold -init -recovery } restorecon_prop:property_service set;' |
| 186 | ) |