aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.mk18
-rw-r--r--bootanim.te1
-rw-r--r--domain.te69
-rw-r--r--file.te9
-rw-r--r--genfs_contexts1
-rw-r--r--init.te4
-rw-r--r--kernel.te3
-rw-r--r--keystore.te13
-rw-r--r--mediaserver.te2
-rw-r--r--netd.te6
-rw-r--r--property_contexts2
-rw-r--r--recovery.te10
-rw-r--r--su.te1
-rw-r--r--system_server.te11
-rw-r--r--vold.te26
15 files changed, 128 insertions, 48 deletions
diff --git a/Android.mk b/Android.mk
index 1b903bd..6873d07 100644
--- a/Android.mk
+++ b/Android.mk
@@ -24,7 +24,22 @@ endif
# Builds paths for all policy files found in BOARD_SEPOLICY_DIRS.
# $(1): the set of policy name paths to build
-build_policy = $(foreach type, $(1), $(wildcard $(addsuffix /$(type), $(LOCAL_PATH) $(BOARD_SEPOLICY_DIRS))))
+build_policy = $(call uniq,$(foreach type, $(1), \
+ $(filter-out $(BOARD_SEPOLICY_IGNORE), \
+ $(foreach expanded_type, $(notdir $(wildcard $(addsuffix /$(type), $(LOCAL_PATH)))), \
+ $(if $(filter $(expanded_type), $(BOARD_SEPOLICY_REPLACE)), \
+ $(wildcard $(addsuffix $(expanded_type), $(sort $(dir $(sepolicy_replace_paths))))), \
+ $(LOCAL_PATH)/$(expanded_type) \
+ ) \
+ ) \
+ $(foreach union_policy, $(wildcard $(addsuffix /$(type), $(BOARD_SEPOLICY_DIRS))), \
+ $(if $(filter $(notdir $(union_policy)), $(BOARD_SEPOLICY_UNION)), \
+ $(union_policy), \
+ ) \
+ ) \
+ ) \
+))
+build_policy = $(call uniq, $(foreach type, $(1), $(wildcard $(addsuffix /$(type), $(LOCAL_PATH) $(BOARD_SEPOLICY_DIRS)))))
sepolicy_build_files := security_classes \
initial_sids \
@@ -62,6 +77,7 @@ $(sepolicy_policy.conf) : $(call build_policy, $(sepolicy_build_files))
@mkdir -p $(dir $@)
$(hide) m4 -D mls_num_sens=$(PRIVATE_MLS_SENS) -D mls_num_cats=$(PRIVATE_MLS_CATS) \
-D target_build_variant=$(TARGET_BUILD_VARIANT) \
+ -D shipping_build=$(CYNGN_TARGET) \
-s $^ > $@
$(hide) sed '/dontaudit/d' $@ > $@.dontaudit
diff --git a/bootanim.te b/bootanim.te
index dd1e57a..f809fab 100644
--- a/bootanim.te
+++ b/bootanim.te
@@ -16,4 +16,5 @@ allow bootanim oemfs:file r_file_perms;
allow bootanim audio_device:dir r_dir_perms;
allow bootanim audio_device:chr_file rw_file_perms;
+allow bootanim mediaserver:binder { transfer call };
allow bootanim surfaceflinger_service:service_manager find;
diff --git a/domain.te b/domain.te
index 0f6c6da..b6eeb2e 100644
--- a/domain.te
+++ b/domain.te
@@ -196,8 +196,9 @@ neverallow {
-vold
} self:capability mknod;
+attribute rmt_placeholder;
# Limit raw I/O to these whitelisted domains.
-neverallow { domain -kernel -init -recovery -ueventd -watchdogd -healthd -vold -uncrypt -tee } self:capability sys_rawio;
+neverallow { domain -kernel -init -recovery -ueventd -watchdogd -healthd -vold -uncrypt -tee -rmt_placeholder } self:capability sys_rawio;
# No process can map low memory (< CONFIG_LSM_MMAP_MIN_ADDR).
neverallow domain self:memprotect mmap_zero;
@@ -227,9 +228,9 @@ neverallow { domain -init } security_file:{ dir file lnk_file } { relabelfrom re
# system_server is for creating subdirectories under /data/security.
neverallow { domain -init -system_server } security_file:dir { create setattr };
# Only system_server can create subdirectories and files under /data/security.
-neverallow { domain -system_server } security_file:dir { rename write add_name remove_name rmdir };
-neverallow { domain -system_server } security_file:file { create setattr write append unlink link rename };
-neverallow { domain -system_server } security_file:lnk_file { create setattr unlink rename };
+neverallow { domain -system_server -recovery } security_file:dir { rename write add_name remove_name rmdir };
+neverallow { domain -system_server -recovery } security_file:file { create setattr write append unlink link rename };
+neverallow { domain -system_server -recovery } security_file:lnk_file { create setattr unlink rename };
# Only init prior to switching context should be able to set enforcing mode.
# init starts in kernel domain and switches to init domain via setcon in
@@ -253,8 +254,8 @@ neverallow { domain -init -system_server -ueventd } hw_random_device:chr_file *;
neverallow domain { file_type -exec_type }:file entrypoint;
# Ensure that nothing in userspace can access /dev/mem or /dev/kmem
-neverallow { domain -kernel -ueventd -init } kmem_device:chr_file *;
-neverallow domain kmem_device:chr_file ~{ create relabelto unlink setattr };
+neverallow { domain -rmt_placeholder -kernel -ueventd -init } kmem_device:chr_file *;
+neverallow { domain -rmt_placeholder } kmem_device:chr_file ~{ create relabelto unlink setattr };
# Only init should be able to configure kernel usermodehelpers or
# security-sensitive proc settings.
@@ -303,8 +304,8 @@ neverallow {
} { fs_type -rootfs }:file execute;
# Only the init property service should write to /data/property.
-neverallow { domain -init } property_data_file:dir no_w_dir_perms;
-neverallow { domain -init } property_data_file:file no_w_file_perms;
+neverallow { domain -init -recovery } property_data_file:dir no_w_dir_perms;
+neverallow { domain -init -recovery } property_data_file:file no_w_file_perms;
# Only recovery should be doing writes to /system
neverallow { domain -recovery } { system_file exec_type }:dir_file_class_set
@@ -315,11 +316,18 @@ neverallow { domain -recovery -kernel } { system_file exec_type }:dir_file_class
neverallow domain { system_file exec_type }:dir_file_class_set mounton;
# Nothing should be writing to files in the rootfs.
-neverallow domain rootfs:file { create write setattr relabelto append unlink link rename };
+ifelse(shipping_build, `true',
+ `neverallow domain rootfs:file { create write setattr relabelto append unlink link rename };'
+,
+)
# Restrict context mounts to specific types marked with
# the contextmount_type attribute.
-neverallow domain {fs_type -contextmount_type}:filesystem relabelto;
+ifelse(shipping_build, `true',
+ `neverallow domain {fs_type -contextmount_type}:filesystem relabelto;'
+,
+ `neverallow domain {fs_type -contextmount_type -sdcard_posix}:filesystem relabelto;'
+)
# Ensure that context mount types are not writable, to ensure that
# the write to /system restriction above is not bypassed via context=
@@ -351,21 +359,17 @@ neverallow { domain -servicemanager } *:binder set_context_mgr;
# Only authorized processes should be writing to files in /data/dalvik-cache
# (excluding /data/dalvik-cache/profiles, which is labeled differently)
-neverallow {
- domain
- -init # TODO: limit init to relabelfrom for files
- -zygote
- -installd
- -dex2oat
-} dalvikcache_data_file:file no_w_file_perms;
-
-neverallow {
- domain
- -init
- -installd
- -dex2oat
- -zygote
-} dalvikcache_data_file:dir no_w_dir_perms;
+ifelse(shipping_build, `true',
+ `neverallow { domain -init -zygote -installd -dex2oat } dalvikcache_data_file:file no_w_file_perms;'
+,
+ `neverallow { domain -init -zygote -installd -dex2oat -system_server -recovery} dalvikcache_data_file:file no_w_file_perms;'
+)
+
+ifelse(shipping_build, `true',
+ `neverallow { domain -init -installd -dex2oat -zygote } dalvikcache_data_file:dir no_w_dir_perms;'
+,
+ `neverallow { domain -init -installd -dex2oat -zygote -recovery } dalvikcache_data_file:dir no_w_dir_perms;'
+)
# Only system_server should be able to send commands via the zygote socket
neverallow { domain -zygote -system_server } zygote:unix_stream_socket connectto;
@@ -396,7 +400,7 @@ neverallow domain { file_type fs_type dev_type }:{ lnk_file fifo_file sock_file
# Nobody should be able to execute su on user builds.
# On userdebug/eng builds, only dumpstate, shell, and
# su itself execute su.
-neverallow { domain userdebug_or_eng(`-dumpstate -shell -su') } su_exec:file no_x_file_perms;
+neverallow { domain userdebug_or_eng(`-dumpstate -shell -su -init -untrusted_app -sudaemon') } su_exec:file no_x_file_perms;
# Do not allow the introduction of new execmod rules. Text relocations
# and modification of executable pages are unsafe.
@@ -434,13 +438,12 @@ neverallow ~domain domain:process { transition dyntransition };
# Example type transition:
# mydomain.te:file_type_auto_trans(mydomain, system_data_file, new_file_type)
#
-neverallow {
- domain
- -system_server
- -system_app
- -init
- -installd # for relabelfrom and unlink, check for this in explicit neverallow
-} system_data_file:file no_w_file_perms;
+ifelse(shipping_build, `true',
+ `neverallow { domain -system_server -system_app -init -installd } system_data_file:file no_w_file_perms;'
+,
+ `neverallow { domain -system_server -system_app -init -installd -recovery } system_data_file:file no_w_file_perms;'
+)
+
# do not grant anything greater than r_file_perms and relabelfrom unlink
# to installd
neverallow installd system_data_file:file ~{ r_file_perms relabelfrom unlink };
diff --git a/file.te b/file.te
index 555b89f..0bac206 100644
--- a/file.te
+++ b/file.te
@@ -35,6 +35,12 @@ type shm, fs_type;
type mqueue, fs_type;
type fuse, sdcard_type, fs_type, mlstrustedobject;
type vfat, sdcard_type, fs_type, mlstrustedobject;
+ifelse(shipping_build, `true',
+ # Dummy this out in shipping to avoid breaking code mentioning the label
+ `typealias vfat alias sdcard_posix;'
+,
+ `type sdcard_posix, sdcard_type, fs_type, mlstrustedobject;'
+)
typealias fuse alias sdcard_internal;
typealias vfat alias sdcard_external;
type debugfs, fs_type, mlstrustedobject;
@@ -187,6 +193,9 @@ type sap_uim_socket, file_type;
# UART (for GPS) control proc file
type gps_control, file_type;
+# Used by vold
+type proc_dirty_ratio, fs_type;
+
# Allow files to be created in their appropriate filesystems.
allow fs_type self:filesystem associate;
allow sysfs_type sysfs:filesystem associate;
diff --git a/genfs_contexts b/genfs_contexts
index cdf65bc..0bbf97f 100644
--- a/genfs_contexts
+++ b/genfs_contexts
@@ -21,6 +21,7 @@ genfscon proc /sys/kernel/usermodehelper u:object_r:usermodehelper:s0
genfscon proc /sys/net u:object_r:proc_net:s0
genfscon proc /sys/vm/mmap_min_addr u:object_r:proc_security:s0
genfscon proc /sys/vm/drop_caches u:object_r:proc_drop_caches:s0
+genfscon proc /sys/vm/dirty_ratio u:object_r:proc_dirty_ratio:s0
genfscon proc /uid_cputime/show_uid_stat u:object_r:proc_uid_cputime_showstat:s0
genfscon proc /uid_cputime/remove_uid_range u:object_r:proc_uid_cputime_removeuid:s0
diff --git a/init.te b/init.te
index 41eafe2..a9c567e 100644
--- a/init.te
+++ b/init.te
@@ -225,6 +225,10 @@ allow init self:capability net_raw;
# set scheduling parameters for a kernel domain task.
allow init kernel:process setsched;
+# Allow init to read the context on userdirs (but not their contents)
+# We need this before relabeling them coming from 4.4
+allow init app_data_file:{ lnk_file dir } { getattr relabelfrom };
+
# swapon() needs write access to swap device
# system/core/fs_mgr/fs_mgr.c - fs_mgr_swapon_all
allow init swap_block_device:blk_file rw_file_perms;
diff --git a/kernel.te b/kernel.te
index 6747d1c..baa85b3 100644
--- a/kernel.te
+++ b/kernel.te
@@ -76,3 +76,6 @@ neverallow domain kernel:process { transition dyntransition };
# - You are running an exploit which switched to the init task credentials
# and is then trying to exec a shell or other program. You lose!
neverallow kernel { file_type fs_type -rootfs }:file { entrypoint execute_no_trans };
+
+# For UMS full-device exports
+allow kernel block_device:blk_file r_file_perms;
diff --git a/keystore.te b/keystore.te
index 83a0e85..b5d119f 100644
--- a/keystore.te
+++ b/keystore.te
@@ -23,10 +23,15 @@ selinux_check_access(keystore)
### Protect ourself from others
###
-neverallow { domain -keystore } keystore_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
-neverallow { domain -keystore } keystore_data_file:notdevfile_class_set ~{ relabelto getattr };
+neverallow { domain -keystore -recovery } keystore_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
+neverallow { domain -keystore -recovery } keystore_data_file:notdevfile_class_set ~{ relabelto getattr };
-neverallow { domain -keystore -init } keystore_data_file:dir *;
-neverallow { domain -keystore -init } keystore_data_file:notdevfile_class_set *;
+ifelse(shipping_build, `true',
+ `neverallow { domain -keystore -init } keystore_data_file:dir *;
+ neverallow { domain -keystore -init } keystore_data_file:notdevfile_class_set *;'
+,
+ `neverallow { domain -keystore -init -recovery } keystore_data_file:dir *;
+ neverallow { domain -keystore -init -recovery } keystore_data_file:notdevfile_class_set *;'
+)
neverallow domain keystore:process ptrace;
diff --git a/mediaserver.te b/mediaserver.te
index 0299466..bc942f3 100644
--- a/mediaserver.te
+++ b/mediaserver.te
@@ -94,6 +94,8 @@ allow mediaserver surfaceflinger_service:service_manager find;
allow mediaserver oemfs:dir search;
allow mediaserver oemfs:file r_file_perms;
+allow mediaserver bootanim:binder { transfer call };
+
use_drmservice(mediaserver)
allow mediaserver drmserver:drmservice {
consumeRights
diff --git a/netd.te b/netd.te
index d4c5153..81bf160 100644
--- a/netd.te
+++ b/netd.te
@@ -43,7 +43,11 @@ allow netd dhcp:process signal;
# these capabilities
allow netd self:capability { dac_override chown fowner };
allow netd wifi_data_file:file create_file_perms;
-allow netd wifi_data_file:dir rw_dir_perms;
+allow netd wifi_data_file:dir create_dir_perms;
+allow netd wifi_data_file:sock_file { create setattr unlink write };
+
+# Allow netd to chmod dir /data/misc/dhcp
+allow netd dhcp_data_file:dir create_dir_perms;
# Needed to update /data/misc/net/rt_tables
allow netd net_data_file:file create_file_perms;
diff --git a/property_contexts b/property_contexts
index 5bdb3c3..2a461e8 100644
--- a/property_contexts
+++ b/property_contexts
@@ -31,7 +31,7 @@ debug. u:object_r:debug_prop:s0
debug.db. u:object_r:debuggerd_prop:s0
log. u:object_r:shell_prop:s0
service.adb.root u:object_r:shell_prop:s0
-service.adb.tcp.port u:object_r:shell_prop:s0
+service.adb.tcp.port* u:object_r:shell_prop:s0
persist.audio. u:object_r:audio_prop:s0
persist.logd. u:object_r:logd_prop:s0
diff --git a/recovery.te b/recovery.te
index 8d6fd62..646e42f 100644
--- a/recovery.te
+++ b/recovery.te
@@ -114,5 +114,11 @@ recovery_only(`
# domains, including recovery.
#
# TODO: tighten this up further.
-neverallow recovery data_file_type:file { no_w_file_perms no_x_file_perms };
-neverallow recovery data_file_type:dir no_w_dir_perms;
+ifelse(shipping_build, `true',
+ `neverallow recovery data_file_type:file { no_w_file_perms no_x_file_perms };'
+,
+)
+ifelse(shipping_build, `true',
+ `neverallow recovery data_file_type:dir no_w_dir_perms;'
+,
+)
diff --git a/su.te b/su.te
index d4a488b..d135459 100644
--- a/su.te
+++ b/su.te
@@ -1,5 +1,6 @@
# File types must be defined for file_contexts.
type su_exec, exec_type, file_type;
+type sudaemon, domain;
userdebug_or_eng(`
# Domain used for su processes, as well as for adbd and adb shell
diff --git a/system_server.te b/system_server.te
index c9d8f3b..36c36e9 100644
--- a/system_server.te
+++ b/system_server.te
@@ -134,6 +134,7 @@ binder_call(system_server, binderservicedomain)
binder_call(system_server, gatekeeperd)
binder_call(system_server, fingerprintd)
binder_call(system_server, appdomain)
+binder_call(system_server, bootanim)
binder_call(system_server, dumpstate)
binder_service(system_server)
@@ -295,6 +296,11 @@ set_prop(system_server, powerctl_prop)
set_prop(system_server, fingerprint_prop)
# ctl interface
+allow system_server ctl_bootanim_prop:property_service set;
+
+# Use open file provided by bootanim.
+allow system_server bootanim:fd use;
+
set_prop(system_server, ctl_default_prop)
set_prop(system_server, ctl_dhcp_pan_prop)
set_prop(system_server, ctl_bugreport_prop)
@@ -455,7 +461,10 @@ neverallow system_server { bluetooth_data_file nfc_data_file shell_data_file app
# a bug (for example, bug 16317188), or represents an attempt by
# system server to dynamically load a dex file, something we do not
# want to allow.
-neverallow system_server dex2oat_exec:file no_x_file_perms;
+ifelse(shipping_build, `true',
+ `neverallow system_server dex2oat_exec:file no_x_file_perms;'
+,
+)
# The only block device system_server should be accessing is
# the frp_block_device. This helps avoid a system_server to root
diff --git a/vold.te b/vold.te
index b22436f..7ddf2b7 100644
--- a/vold.te
+++ b/vold.te
@@ -34,6 +34,10 @@ allow vold sdcard_type:dir mounton; # TODO: deprecated in M
allow vold sdcard_type:filesystem { mount remount unmount }; # TODO: deprecated in M
allow vold sdcard_type:dir create_dir_perms; # TODO: deprecated in M
allow vold sdcard_type:file create_file_perms; # TODO: deprecated in M
+ifelse(shipping_build, `true', ,
+ allow vold sdcard_posix:filesystem { relabelto relabelfrom };
+)
+allow vold labeledfs:filesystem { relabelfrom };
# Manage locations where storage is mounted
allow vold { mnt_media_rw_file storage_file sdcard_type }:dir create_dir_perms;
@@ -137,6 +141,10 @@ allow vold tee_device:chr_file rw_file_perms;
# Access userdata block device.
allow vold userdata_block_device:blk_file rw_file_perms;
+auditallow vold userdata_block_device:blk_file rw_file_perms;
+
+# For UMS tuning
+allow vold proc_dirty_ratio:file rw_file_perms;
# Access metadata block device used for encryption meta-data.
allow vold metadata_block_device:blk_file rw_file_perms;
@@ -163,8 +171,16 @@ allow vold self:capability sys_nice;
allow vold self:capability sys_chroot;
allow vold storage_file:dir mounton;
-neverallow { domain -vold } vold_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
-neverallow { domain -vold } vold_data_file:notdevfile_class_set ~{ relabelto getattr };
-neverallow { domain -vold -init } vold_data_file:dir *;
-neverallow { domain -vold -init } vold_data_file:notdevfile_class_set *;
-neverallow { domain -vold -init } restorecon_prop:property_service set;
+ifelse(shipping_build, `true',
+ `neverallow { domain -vold } vold_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
+ neverallow { domain -vold } vold_data_file:notdevfile_class_set ~{ relabelto getattr };
+ neverallow { domain -vold -init } vold_data_file:dir *;
+ neverallow { domain -vold -init } vold_data_file:notdevfile_class_set *;
+ neverallow { domain -vold -init } restorecon_prop:property_service set;'
+,
+ `neverallow { domain -vold -recovery } vold_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
+ neverallow { domain -vold -recovery } vold_data_file:notdevfile_class_set ~{ relabelto getattr };
+ neverallow { domain -vold -init -recovery } vold_data_file:dir *;
+ neverallow { domain -vold -init -recovery } vold_data_file:notdevfile_class_set *;
+ neverallow { domain -vold -init -recovery } restorecon_prop:property_service set;'
+)