30ae427ed0
This is a rather large, single change to the SEPolicies, as fuseblk required multiple new domains. The goal is to allow any fuseblk drivers to also use the same sepolicy. Note the compartmentalized domain for sys_admin and mount/unmount permissions. Bug: 254407246 Test: Extensive testing with an ADT-4 and NTFS USB drives. Change-Id: I6619ac77ce44ba60edd6ab10e8436a8712459b48
67 lines
2.4 KiB
Text
67 lines
2.4 KiB
Text
# Any fsck program run on untrusted block devices
|
|
type fsck_untrusted, domain;
|
|
|
|
# Inherit and use pty created by android_fork_execvp_ext().
|
|
allow fsck_untrusted devpts:chr_file { read write ioctl getattr };
|
|
|
|
# Allow stdin/out back to vold
|
|
allow fsck_untrusted vold:fd use;
|
|
allow fsck_untrusted vold:fifo_file { read write getattr };
|
|
|
|
# Run fsck on vold block devices
|
|
allow fsck_untrusted block_device:dir search;
|
|
allow fsck_untrusted vold_device:blk_file rw_file_perms;
|
|
|
|
allow fsck_untrusted proc_mounts:file r_file_perms;
|
|
|
|
# To determine if it is safe to run fsck on a filesystem, e2fsck
|
|
# must first determine if the filesystem is mounted. To do that,
|
|
# e2fsck scans through /proc/mounts and collects all the mounted
|
|
# block devices. With that information, it runs stat() on each block
|
|
# device, comparing the major and minor numbers to the filesystem
|
|
# passed in on the command line. If there is a match, then the filesystem
|
|
# is currently mounted and running fsck is dangerous.
|
|
# Allow stat access to all block devices so that fsck can compare
|
|
# major/minor values.
|
|
allow fsck_untrusted dev_type:blk_file getattr;
|
|
|
|
###
|
|
### neverallow rules
|
|
###
|
|
|
|
# Untrusted fsck should never be run on block devices holding sensitive data
|
|
neverallow fsck_untrusted {
|
|
boot_block_device
|
|
frp_block_device
|
|
metadata_block_device
|
|
recovery_block_device
|
|
root_block_device
|
|
swap_block_device
|
|
system_block_device
|
|
userdata_block_device
|
|
cache_block_device
|
|
dm_device
|
|
}:blk_file no_rw_file_perms;
|
|
|
|
# Only allow entry from vold via fsck binaries
|
|
neverallow { domain -vold } fsck_untrusted:process transition;
|
|
neverallow * fsck_untrusted:process dyntransition;
|
|
neverallow fsck_untrusted { file_type fs_type -fsck_exec }:file entrypoint;
|
|
|
|
# fsck_untrusted should never have sys_admin permissions. If it requires sys_admin
|
|
# permissions, that is a code mistake that needs to be fixed, not a permission that
|
|
# should be granted. Same with setgid and setuid.
|
|
neverallow fsck_untrusted self:global_capability_class_set { setgid setuid sys_admin };
|
|
|
|
###
|
|
### dontaudit rules
|
|
###
|
|
|
|
# Ignores attempts to access sysfs. fsck binaries seem to like trying to go
|
|
# here, but nothing bad happens if they can't, and they shouldn't be allowed.
|
|
dontaudit fsck_untrusted sysfs:file rw_file_perms;
|
|
dontaudit fsck_untrusted sysfs_dm:file rw_file_perms;
|
|
dontaudit fsck_untrusted sysfs_dm:dir rw_dir_perms;
|
|
|
|
# Ignore attempts to access tmpfs. fsck don't need to do this.
|
|
dontaudit fsck_untrusted tmpfs:lnk_file read;
|