Alex Klyubin | f5446eb | 2017-03-23 14:27:32 -0700 | [diff] [blame] | 1 | typeattribute vold coredomain; |
| 2 | |
dcashman | cc39f63 | 2016-07-22 13:13:11 -0700 | [diff] [blame] | 3 | init_daemon_domain(vold) |
| 4 | |
| 5 | # Switch to more restrictive domains when executing common tools |
| 6 | domain_auto_trans(vold, sgdisk_exec, sgdisk); |
| 7 | domain_auto_trans(vold, sdcardd_exec, sdcardd); |
Alfred Piccioni | 30ae427 | 2023-01-17 18:22:34 +0100 | [diff] [blame] | 8 | domain_auto_trans(vold, fuseblkd_untrusted_exec, fuseblkd_untrusted); |
dcashman | cc39f63 | 2016-07-22 13:13:11 -0700 | [diff] [blame] | 9 | |
Kelvin Zhang | 2b41362 | 2023-06-26 14:52:27 -0700 | [diff] [blame] | 10 | # Switch to e2fs domain when running mkfs.ext4 to format a partition |
| 11 | domain_auto_trans(vold, e2fs_exec, e2fs); |
| 12 | |
| 13 | |
dcashman | cc39f63 | 2016-07-22 13:13:11 -0700 | [diff] [blame] | 14 | # For a handful of probing tools, we choose an even more restrictive |
| 15 | # domain when working with untrusted block devices |
Paul Crowley | f9f7539 | 2018-11-30 15:58:26 -0800 | [diff] [blame] | 16 | domain_trans(vold, blkid_exec, blkid); |
| 17 | domain_trans(vold, blkid_exec, blkid_untrusted); |
dcashman | cc39f63 | 2016-07-22 13:13:11 -0700 | [diff] [blame] | 18 | domain_trans(vold, fsck_exec, fsck); |
| 19 | domain_trans(vold, fsck_exec, fsck_untrusted); |
| 20 | |
| 21 | # Newly created storage dirs are always treated as mount stubs to prevent us |
| 22 | # from accidentally writing when the mount point isn't present. |
| 23 | type_transition vold storage_file:dir storage_stub_file; |
| 24 | type_transition vold mnt_media_rw_file:dir mnt_media_rw_stub_file; |
Inseob Kim | 55e5c9b | 2020-03-04 17:20:35 +0900 | [diff] [blame] | 25 | |
| 26 | # Property Service |
Inseob Kim | 3f5a7d2 | 2020-04-06 20:49:17 +0900 | [diff] [blame] | 27 | get_prop(vold, vold_config_prop) |
Martijn Coenen | 01234d3 | 2020-04-10 14:11:49 +0200 | [diff] [blame] | 28 | get_prop(vold, storage_config_prop); |
Songchun Fan | 9fdcbcd | 2020-04-28 13:24:54 -0700 | [diff] [blame] | 29 | get_prop(vold, incremental_prop); |
Howard Chen | 8720492 | 2021-09-16 09:55:50 +0800 | [diff] [blame] | 30 | get_prop(vold, gsid_prop); |
Inseob Kim | 3f5a7d2 | 2020-04-06 20:49:17 +0900 | [diff] [blame] | 31 | |
Inseob Kim | 55e5c9b | 2020-03-04 17:20:35 +0900 | [diff] [blame] | 32 | set_prop(vold, vold_prop) |
Inseob Kim | 3f5a7d2 | 2020-04-06 20:49:17 +0900 | [diff] [blame] | 33 | set_prop(vold, vold_status_prop) |
Inseob Kim | 55e5c9b | 2020-03-04 17:20:35 +0900 | [diff] [blame] | 34 | set_prop(vold, powerctl_prop) |
| 35 | set_prop(vold, ctl_fuse_prop) |
| 36 | set_prop(vold, restorecon_prop) |
| 37 | set_prop(vold, ota_prop) |
| 38 | set_prop(vold, boottime_prop) |
Inseob Kim | 42c7d89 | 2020-03-04 17:20:35 +0900 | [diff] [blame] | 39 | set_prop(vold, boottime_public_prop) |
Janis Danisevskis | 32d7738 | 2020-07-31 22:22:49 -0700 | [diff] [blame] | 40 | |
| 41 | # Vold will use Keystore instead of using Keymint directly. But it still needs |
| 42 | # to manage its Keymint blobs. This is why it needs the `manage_blob` permission. |
| 43 | allow vold vold_key:keystore2_key { |
Satya Tangirala | 0653374 | 2021-03-08 09:48:42 -0800 | [diff] [blame] | 44 | convert_storage_key_to_ephemeral |
Janis Danisevskis | 32d7738 | 2020-07-31 22:22:49 -0700 | [diff] [blame] | 45 | delete |
| 46 | get_info |
Janis Danisevskis | 32d7738 | 2020-07-31 22:22:49 -0700 | [diff] [blame] | 47 | manage_blob |
| 48 | rebind |
| 49 | req_forced_op |
| 50 | update |
| 51 | use |
| 52 | }; |
Xin Li | 11da9e6 | 2020-08-29 01:45:24 -0700 | [diff] [blame] | 53 | |
Satya Tangirala | a999004 | 2021-03-01 02:53:46 -0800 | [diff] [blame] | 54 | # vold needs to call keystore methods |
| 55 | allow vold keystore:binder call; |
| 56 | |
Satya Tangirala | 5ef8686 | 2021-03-11 03:57:03 -0800 | [diff] [blame] | 57 | # vold needs to find keystore2 services |
Satya Tangirala | a999004 | 2021-03-01 02:53:46 -0800 | [diff] [blame] | 58 | allow vold keystore_service:service_manager find; |
Satya Tangirala | 5ef8686 | 2021-03-11 03:57:03 -0800 | [diff] [blame] | 59 | allow vold keystore_maintenance_service:service_manager find; |
| 60 | |
Paul Crowley | bf29c3a | 2021-08-06 15:11:53 -0700 | [diff] [blame] | 61 | # vold needs to be able to call earlyBootEnded() and deleteAllKeys() |
Satya Tangirala | 5ef8686 | 2021-03-11 03:57:03 -0800 | [diff] [blame] | 62 | allow vold keystore:keystore2 early_boot_ended; |
Paul Crowley | bf29c3a | 2021-08-06 15:11:53 -0700 | [diff] [blame] | 63 | allow vold keystore:keystore2 delete_all_keys; |
Satya Tangirala | 5ef8686 | 2021-03-11 03:57:03 -0800 | [diff] [blame] | 64 | |
Ellen Arteca | 27b515e | 2024-04-30 20:26:55 +0000 | [diff] [blame^] | 65 | is_flag_enabled(RELEASE_UNLOCKED_STORAGE_API, ` |
| 66 | # Allow vold to encrypt storage area directories on behalf of apps. |
| 67 | allow vold { |
| 68 | storage_area_dir |
| 69 | storage_area_app_dir |
| 70 | }:dir { |
| 71 | getattr |
| 72 | ioctl # for FS_IOC_SET_ENCRYPTION_POLICY |
| 73 | open |
| 74 | read # for open(O_RDONLY) for ioctl |
| 75 | search |
| 76 | }; |
| 77 | ') |
| 78 | |
| 79 | # when a storage area is created (with `openStorageArea`), vold creates the key |
| 80 | # and when a storage area is deleted (with `deleteStorageArea`), vold deletes the key |
| 81 | is_flag_enabled(RELEASE_UNLOCKED_STORAGE_API, ` |
| 82 | allow vold storage_area_key_file:file create_file_perms; |
| 83 | allow vold storage_area_key_file:dir create_dir_perms; |
| 84 | ') |
| 85 | |
Eric Biggers | 9a59923 | 2022-05-04 22:18:02 +0000 | [diff] [blame] | 86 | # Allow vold to create and delete per-user directories like /data/user/$userId. |
| 87 | allow vold { |
| 88 | media_userdir_file |
| 89 | system_userdir_file |
| 90 | vendor_userdir_file |
| 91 | }:dir { |
| 92 | add_name |
| 93 | remove_name |
| 94 | write |
| 95 | }; |
| 96 | |
Inseob Kim | 75806ef | 2024-03-27 17:18:41 +0900 | [diff] [blame] | 97 | # Read already opened /cache files. |
| 98 | allow vold cache_file:dir r_dir_perms; |
| 99 | allow vold cache_file:file { getattr read }; |
| 100 | allow vold cache_file:lnk_file r_file_perms; |
| 101 | |
| 102 | r_dir_file(vold, { sysfs_type -sysfs_batteryinfo }) |
| 103 | # XXX Label sysfs files with a specific type? |
| 104 | allow vold { |
| 105 | sysfs # writing to /sys/*/uevent during coldboot. |
| 106 | sysfs_devices_block |
| 107 | sysfs_dm |
| 108 | sysfs_loop # writing to /sys/block/loop*/uevent during coldboot. |
| 109 | sysfs_usb |
| 110 | sysfs_zram_uevent |
| 111 | sysfs_fs_f2fs |
| 112 | }:file w_file_perms; |
| 113 | |
| 114 | r_dir_file(vold, rootfs) |
| 115 | r_dir_file(vold, metadata_file) |
| 116 | allow vold { |
| 117 | proc # b/67049235 processes /proc/<pid>/* files are mislabeled. |
| 118 | proc_bootconfig |
| 119 | proc_cmdline |
| 120 | proc_drop_caches |
| 121 | proc_filesystems |
| 122 | proc_meminfo |
| 123 | proc_mounts |
| 124 | }:file r_file_perms; |
| 125 | |
| 126 | #Get file contexts |
| 127 | allow vold file_contexts_file:file r_file_perms; |
| 128 | |
| 129 | # Allow us to jump into execution domains of above tools |
| 130 | allow vold self:process setexec; |
| 131 | |
| 132 | # For formatting adoptable storage devices |
| 133 | allow vold e2fs_exec:file rx_file_perms; |
| 134 | |
| 135 | # Run fstrim on mounted partitions |
| 136 | # allowxperm still requires the ioctl permission for the individual type |
| 137 | allowxperm vold { fs_type file_type }:dir ioctl FITRIM; |
| 138 | |
| 139 | # Get/set file-based encryption policies on dirs in /data and adoptable storage, |
| 140 | # and add/remove file-based encryption keys. |
| 141 | allowxperm vold data_file_type:dir ioctl { |
| 142 | FS_IOC_GET_ENCRYPTION_POLICY |
Ellen Arteca | 27b515e | 2024-04-30 20:26:55 +0000 | [diff] [blame^] | 143 | FS_IOC_GET_ENCRYPTION_POLICY_EX |
Inseob Kim | 75806ef | 2024-03-27 17:18:41 +0900 | [diff] [blame] | 144 | FS_IOC_SET_ENCRYPTION_POLICY |
| 145 | FS_IOC_ADD_ENCRYPTION_KEY |
| 146 | FS_IOC_REMOVE_ENCRYPTION_KEY |
| 147 | FS_IOC_GET_ENCRYPTION_KEY_STATUS |
| 148 | }; |
| 149 | |
| 150 | # Allow securely erasing crypto key files. F2FS_IOC_SEC_TRIM_FILE is |
| 151 | # tried first. Otherwise, FS_IOC_FIEMAP is needed to get the |
| 152 | # location of the file's blocks on the raw block device to erase. |
| 153 | allowxperm vold { |
| 154 | vold_data_file |
| 155 | vold_metadata_file |
Ellen Arteca | 27b515e | 2024-04-30 20:26:55 +0000 | [diff] [blame^] | 156 | is_flag_enabled(RELEASE_UNLOCKED_STORAGE_API, `storage_area_key_file') |
Inseob Kim | 75806ef | 2024-03-27 17:18:41 +0900 | [diff] [blame] | 157 | }:file ioctl { |
| 158 | F2FS_IOC_SEC_TRIM_FILE |
| 159 | FS_IOC_FIEMAP |
| 160 | }; |
| 161 | |
| 162 | typeattribute vold mlstrustedsubject; |
| 163 | allow vold self:process setfscreate; |
| 164 | allow vold system_file:file x_file_perms; |
| 165 | not_full_treble(`allow vold vendor_file:file x_file_perms;') |
| 166 | allow vold block_device:dir create_dir_perms; |
| 167 | allow vold device:dir write; |
| 168 | allow vold devpts:chr_file rw_file_perms; |
| 169 | allow vold rootfs:dir mounton; |
| 170 | allow vold { sdcard_type fuse }:dir mounton; # TODO: deprecated in M |
| 171 | allow vold { sdcard_type fuse }:filesystem { mount remount unmount }; # TODO: deprecated in M |
| 172 | |
| 173 | # Manage locations where storage is mounted |
| 174 | allow vold { mnt_media_rw_file storage_file sdcard_type fuse }:dir create_dir_perms; |
| 175 | allow vold { mnt_media_rw_file storage_file sdcard_type fuse }:file create_file_perms; |
| 176 | |
| 177 | # Access to storage that backs emulated FUSE daemons for migration optimization |
| 178 | allow vold media_rw_data_file:dir create_dir_perms; |
| 179 | allow vold media_rw_data_file:file create_file_perms; |
| 180 | # Allow mounting (lower filesystem) on parts of media for performance |
| 181 | allow vold media_rw_data_file:dir mounton; |
| 182 | |
| 183 | # Allow setting project quota IDs and enabling project ID inheritance on |
| 184 | # /data/media/$userId/* and /mnt/expand/$volume/media/$userId/* |
| 185 | allowxperm vold media_rw_data_file:{ dir file } ioctl { |
| 186 | FS_IOC_FSGETXATTR |
| 187 | FS_IOC_FSSETXATTR |
| 188 | FS_IOC_GETFLAGS |
| 189 | FS_IOC_SETFLAGS |
| 190 | }; |
| 191 | |
| 192 | # Allow mounting of storage devices |
| 193 | allow vold { mnt_media_rw_stub_file storage_stub_file }:dir { mounton create rmdir getattr setattr }; |
| 194 | |
| 195 | # Manage per-user primary symlinks |
| 196 | allow vold mnt_user_file:dir { create_dir_perms mounton }; |
| 197 | allow vold mnt_user_file:lnk_file create_file_perms; |
| 198 | allow vold mnt_user_file:file create_file_perms; |
| 199 | |
| 200 | # Manage per-user pass_through primary symlinks |
| 201 | allow vold mnt_pass_through_file:dir { create_dir_perms mounton }; |
| 202 | allow vold mnt_pass_through_file:lnk_file create_file_perms; |
| 203 | |
| 204 | # Allow to create and mount expanded storage |
| 205 | allow vold mnt_expand_file:dir { create_dir_perms mounton }; |
| 206 | allow vold apk_data_file:dir { create getattr setattr }; |
| 207 | allow vold shell_data_file:dir { create getattr setattr }; |
| 208 | allow vold system_userdir_file:dir { create getattr setattr }; |
| 209 | allow vold media_userdir_file:dir { create getattr setattr open read ioctl }; |
| 210 | # Needed to set the casefold flag on /mnt/expand/$volume/media |
| 211 | allowxperm vold media_userdir_file:dir ioctl { FS_IOC_GETFLAGS FS_IOC_SETFLAGS }; |
| 212 | |
| 213 | # Allow to mount incremental file system on /data/incremental and create files |
| 214 | allow vold apk_data_file:dir { mounton rw_dir_perms }; |
| 215 | # Allow to create and write files in /data/incremental |
| 216 | allow vold apk_data_file:file { rw_file_perms unlink }; |
| 217 | # Allow to bind-mount incremental file system on /data/app/vmdl*.tmp and read files |
| 218 | allow vold apk_tmp_file:dir { mounton r_dir_perms }; |
| 219 | # Allow to read incremental control file and call selinux restorecon on it |
| 220 | allow vold incremental_control_file:file { r_file_perms relabelto }; |
| 221 | |
| 222 | allow vold tmpfs:filesystem { mount unmount }; |
| 223 | allow vold tmpfs:dir create_dir_perms; |
| 224 | allow vold tmpfs:dir mounton; |
| 225 | allow vold self:global_capability_class_set { net_admin dac_override dac_read_search mknod sys_admin chown fowner fsetid }; |
| 226 | allow vold self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl; |
| 227 | allow vold loop_control_device:chr_file rw_file_perms; |
| 228 | allow vold loop_device:blk_file { create setattr unlink rw_file_perms }; |
| 229 | allowxperm vold loop_device:blk_file ioctl { |
| 230 | LOOP_CLR_FD |
| 231 | LOOP_CTL_GET_FREE |
| 232 | LOOP_GET_STATUS64 |
| 233 | LOOP_SET_FD |
| 234 | LOOP_SET_STATUS64 |
| 235 | }; |
| 236 | allow vold vold_device:blk_file { create setattr unlink rw_file_perms }; |
| 237 | allowxperm vold vold_device:blk_file ioctl { BLKDISCARD BLKGETSIZE }; |
| 238 | allow vold dm_device:chr_file rw_file_perms; |
| 239 | allow vold dm_device:blk_file rw_file_perms; |
| 240 | allowxperm vold dm_device:blk_file ioctl { BLKDISCARD BLKSECDISCARD BLKREPORTZONE BLKRESETZONE }; |
| 241 | # For vold Process::killProcessesWithOpenFiles function. |
| 242 | allow vold domain:dir r_dir_perms; |
| 243 | allow vold domain:{ file lnk_file } r_file_perms; |
| 244 | allow vold domain:process { signal sigkill }; |
| 245 | allow vold self:global_capability_class_set { sys_ptrace kill }; |
| 246 | |
| 247 | allow vold kmsg_device:chr_file rw_file_perms; |
| 248 | |
| 249 | # Run fsck in the fsck domain. |
| 250 | allow vold fsck_exec:file { r_file_perms execute }; |
| 251 | |
| 252 | # Log fsck results |
| 253 | allow vold fscklogs:dir rw_dir_perms; |
| 254 | allow vold fscklogs:file create_file_perms; |
| 255 | |
| 256 | # Mount and unmount filesystems. |
| 257 | allow vold labeledfs:filesystem { mount unmount remount }; |
| 258 | |
| 259 | # Create and mount on /data/tmp_mnt and management of expansion mounts |
| 260 | # |
| 261 | # Also rename per-user encrypted directories such as /data/user/10 from their |
| 262 | # temporary name ("10.new") to their final name ("10"). |
| 263 | allow vold { |
| 264 | system_data_file |
| 265 | system_data_root_file |
| 266 | }:dir { create_dir_perms mounton }; |
| 267 | allow vold system_data_file:lnk_file getattr; |
| 268 | |
| 269 | # Vold create users in /data/vendor_{ce,de}/[0-9]+ |
| 270 | allow vold vendor_data_file:dir create_dir_perms; |
| 271 | |
| 272 | # for secdiscard |
| 273 | allow vold system_data_file:file read; |
| 274 | |
| 275 | # Set scheduling policy of kernel processes |
| 276 | allow vold kernel:process setsched; |
| 277 | |
| 278 | # ASEC |
| 279 | allow vold asec_image_file:file create_file_perms; |
| 280 | allow vold asec_image_file:dir rw_dir_perms; |
| 281 | allow vold asec_apk_file:dir { create_dir_perms mounton relabelfrom relabelto }; |
| 282 | allow vold asec_public_file:dir { relabelto setattr }; |
| 283 | allow vold asec_apk_file:file { r_file_perms setattr relabelfrom relabelto }; |
| 284 | allow vold asec_public_file:file { relabelto setattr }; |
| 285 | # restorecon files in asec containers created on 4.2 or earlier. |
| 286 | allow vold unlabeled:dir { r_dir_perms setattr relabelfrom }; |
| 287 | allow vold unlabeled:file { r_file_perms setattr relabelfrom }; |
| 288 | |
| 289 | # Access to FUSE control filesystem to hard-abort FUSE mounts |
| 290 | allow vold fusectlfs:file rw_file_perms; |
| 291 | allow vold fusectlfs:dir rw_dir_perms; |
| 292 | |
| 293 | # Allow vold to use wake locks. Needed for idle maintenance and moving storage. |
| 294 | wakelock_use(vold) |
| 295 | |
| 296 | # Allow vold to publish a binder service and make binder calls. |
| 297 | binder_use(vold) |
| 298 | add_service(vold, vold_service) |
| 299 | |
| 300 | # Allow vold to call into the system server so it can check permissions. |
| 301 | binder_call(vold, system_server) |
| 302 | allow vold permission_service:service_manager find; |
| 303 | |
| 304 | # talk to health storage HAL |
| 305 | hal_client_domain(vold, hal_health_storage) |
| 306 | |
| 307 | # talk to bootloader HAL |
| 308 | full_treble_only(`hal_client_domain(vold, hal_bootctl)') |
| 309 | |
| 310 | # Access userdata block device. |
| 311 | allow vold userdata_block_device:blk_file rw_file_perms; |
| 312 | allowxperm vold userdata_block_device:blk_file ioctl BLKSECDISCARD; |
| 313 | |
| 314 | # Access zoned block device. |
| 315 | allow vold zoned_block_device:blk_file rw_file_perms; |
| 316 | |
| 317 | # Access metadata block device used for encryption meta-data. |
| 318 | allow vold metadata_block_device:blk_file rw_file_perms; |
| 319 | allowxperm vold metadata_block_device:blk_file ioctl BLKSECDISCARD; |
| 320 | |
| 321 | # Allow vold to manipulate /data/unencrypted |
| 322 | allow vold unencrypted_data_file:{ file } create_file_perms; |
| 323 | allow vold unencrypted_data_file:dir create_dir_perms; |
| 324 | |
| 325 | # Write to /proc/sys/vm/drop_caches |
| 326 | allow vold proc_drop_caches:file w_file_perms; |
| 327 | |
| 328 | # Give vold a place where only vold can store files; everyone else is off limits |
| 329 | allow vold vold_data_file:dir create_dir_perms; |
| 330 | allow vold vold_data_file:file create_file_perms; |
| 331 | |
| 332 | # And a similar place in the metadata partition |
| 333 | allow vold vold_metadata_file:dir create_dir_perms; |
| 334 | allow vold vold_metadata_file:file create_file_perms; |
| 335 | |
| 336 | # linux keyring configuration |
| 337 | allow vold init:key { write search setattr }; |
| 338 | allow vold vold:key { write search setattr }; |
| 339 | |
| 340 | # vold temporarily changes its priority when running benchmarks |
| 341 | allow vold self:global_capability_class_set sys_nice; |
| 342 | |
| 343 | # vold needs to chroot into app namespaces to remount when runtime permissions change |
| 344 | allow vold self:global_capability_class_set sys_chroot; |
| 345 | allow vold storage_file:dir mounton; |
| 346 | |
| 347 | # For AppFuse. |
| 348 | allow vold fuse_device:chr_file rw_file_perms; |
| 349 | allow vold fuse:filesystem { relabelfrom }; |
| 350 | allow vold app_fusefs:filesystem { relabelfrom relabelto }; |
| 351 | allow vold app_fusefs:filesystem { mount unmount }; |
| 352 | allow vold app_fuse_file:dir rw_dir_perms; |
| 353 | allow vold app_fuse_file:file { read write open getattr append }; |
| 354 | |
| 355 | # MoveStorage.cpp executes cp and rm |
| 356 | allow vold toolbox_exec:file rx_file_perms; |
| 357 | |
| 358 | # Prepare profile dir for users. |
| 359 | allow vold { user_profile_data_file user_profile_root_file }:dir create_dir_perms; |
| 360 | |
| 361 | # Raw writes to misc block device |
| 362 | allow vold misc_block_device:blk_file w_file_perms; |
| 363 | |
| 364 | # vold might need to search or mount /mnt/vendor/* |
| 365 | allow vold mnt_vendor_file:dir search; |
| 366 | |
| 367 | dontaudit vold self:global_capability_class_set sys_resource; |
| 368 | |
| 369 | # Allow ReadDefaultFstab(). |
| 370 | read_fstab(vold) |
| 371 | |
| 372 | # vold might need to search loopback apex files |
| 373 | allow vold vendor_apex_file:file r_file_perms; |
| 374 | |
| 375 | ### |
| 376 | ### Neverallow rules |
| 377 | ### |
| 378 | |
| 379 | neverallow { |
| 380 | domain |
| 381 | -system_server |
| 382 | -vdc |
| 383 | -vold |
| 384 | -update_verifier |
| 385 | -apexd |
| 386 | -gsid |
| 387 | } vold_service:service_manager find; |
| 388 | |
Eric Biggers | 9a59923 | 2022-05-04 22:18:02 +0000 | [diff] [blame] | 389 | # Only vold should create (and delete) per-user directories like |
| 390 | # /data/user/$userId. This is very important, as these directories need to be |
| 391 | # encrypted with per-user keys, which only vold can do. Encryption can only be |
| 392 | # set up on empty directories, so creation and encryption must happen together. |
Eric Biggers | 9a59923 | 2022-05-04 22:18:02 +0000 | [diff] [blame] | 393 | neverallow { |
| 394 | domain |
| 395 | -vold |
| 396 | } { |
Eric Biggers | 9a59923 | 2022-05-04 22:18:02 +0000 | [diff] [blame] | 397 | media_userdir_file |
Eric Biggers | 17369be | 2022-05-11 05:33:07 +0000 | [diff] [blame] | 398 | system_userdir_file |
| 399 | vendor_userdir_file |
Eric Biggers | 9a59923 | 2022-05-04 22:18:02 +0000 | [diff] [blame] | 400 | }:dir { |
| 401 | add_name |
| 402 | remove_name |
| 403 | write |
| 404 | }; |
Inseob Kim | 75806ef | 2024-03-27 17:18:41 +0900 | [diff] [blame] | 405 | |
| 406 | # Only vold and init should ever set file-based encryption policies. |
| 407 | neverallowxperm { |
| 408 | domain |
| 409 | -vold |
| 410 | -init |
| 411 | -vendor_init |
| 412 | } data_file_type:dir ioctl { FS_IOC_SET_ENCRYPTION_POLICY }; |
| 413 | |
| 414 | # Only vold should ever add/remove file-based encryption keys. |
| 415 | neverallowxperm { |
| 416 | domain |
| 417 | -vold |
| 418 | } data_file_type:dir ioctl { FS_IOC_ADD_ENCRYPTION_KEY FS_IOC_REMOVE_ENCRYPTION_KEY FS_IOC_GET_ENCRYPTION_KEY_STATUS }; |
| 419 | |
| 420 | neverallow { |
| 421 | domain |
| 422 | -vold |
| 423 | -vold_prepare_subdirs |
| 424 | } vold_data_file:dir ~{ open create read getattr setattr search relabelfrom relabelto ioctl }; |
| 425 | |
| 426 | neverallow { |
| 427 | domain |
| 428 | -init |
| 429 | -vold |
| 430 | -vold_prepare_subdirs |
| 431 | } vold_data_file:dir *; |
| 432 | |
| 433 | neverallow { |
| 434 | domain |
| 435 | -init |
| 436 | -vold |
| 437 | } vold_metadata_file:dir *; |
| 438 | |
| 439 | neverallow { |
| 440 | domain |
| 441 | -kernel |
| 442 | -vold |
| 443 | -vold_prepare_subdirs |
| 444 | } vold_data_file:notdevfile_class_set ~{ relabelto getattr }; |
| 445 | |
| 446 | neverallow { |
| 447 | domain |
| 448 | -init |
| 449 | -vold |
| 450 | -vold_prepare_subdirs |
| 451 | } vold_metadata_file:notdevfile_class_set ~{ relabelto getattr }; |
| 452 | |
| 453 | neverallow { |
| 454 | domain |
| 455 | -init |
| 456 | -kernel |
| 457 | -vold |
| 458 | -vold_prepare_subdirs |
| 459 | } { vold_data_file vold_metadata_file }:notdevfile_class_set *; |
| 460 | |
| 461 | neverallow { domain -vold -init } restorecon_prop:property_service set; |
| 462 | |
| 463 | neverallow vold { |
| 464 | domain |
| 465 | -hal_health_storage_server |
| 466 | -hal_keymaster_server |
| 467 | -system_suspend_server |
| 468 | -hal_bootctl_server |
| 469 | -hwservicemanager |
| 470 | -keystore |
| 471 | -servicemanager |
| 472 | -system_server |
| 473 | userdebug_or_eng(`-su') |
| 474 | }:binder call; |
| 475 | |
| 476 | neverallow vold fsck_exec:file execute_no_trans; |
| 477 | neverallow { domain -init } vold:process { transition dyntransition }; |
| 478 | neverallow vold *:process ptrace; |
| 479 | neverallow vold *:rawip_socket *; |