From d065f0483c89d18aa92f60646b3e0867072bc8ff Mon Sep 17 00:00:00 2001
From: Nick Kralevich <nnk@google.com>
Date: Fri, 25 Jul 2014 15:19:47 -0700
Subject: [PATCH] Resync lmp-dev-plus-aosp with master

A DO NOT MERGE change merged from lmp-dev to lmp-dev-plus-aosp.
This is expected, but it's causing unnecessary merge conflicts
when handling AOSP contributions.

Resolve those conflicts.

This is essentially a revert of bf696327246833c9aba55a645e6c433e9f321e27
for lmp-dev-plus-aosp only.

Change-Id: Icc66def7113ab45176ae015f659cb442d53bce5c
---
 adbd.te           |  6 ++++++
 attributes        |  3 +++
 bluetooth.te      |  9 +++++++++
 bootanim.te       |  4 ++++
 domain.te         |  2 ++
 drmserver.te      |  8 ++++++++
 dumpstate.te      | 15 +++++++++++++++
 healthd.te        |  4 ++++
 inputflinger.te   |  4 ++++
 isolated_app.te   |  9 +++++++++
 keystore.te       |  4 ++++
 mediaserver.te    | 10 ++++++++++
 nfc.te            |  9 +++++++++
 platform_app.te   | 10 ++++++++++
 radio.te          | 10 ++++++++++
 surfaceflinger.te |  8 ++++++++
 system_app.te     | 11 +++++++++++
 system_server.te  |  3 +++
 te_macros         |  8 ++++++++
 untrusted_app.te  | 13 +++++++++++++
 20 files changed, 150 insertions(+)

diff --git a/adbd.te b/adbd.te
index 58fdead68..3b654a152 100644
--- a/adbd.te
+++ b/adbd.te
@@ -68,3 +68,9 @@ allow adbd appdomain:unix_stream_socket connectto;
 # ndk-gdb invokes adb pull of app_process, linker, and libc.so.
 allow adbd zygote_exec:file r_file_perms;
 allow adbd system_file:file r_file_perms;
+
+service_manager_local_audit_domain(adbd)
+auditallow adbd {
+    service_manager_type
+    -surfaceflinger_service
+}:service_manager find;
diff --git a/attributes b/attributes
index 613ed8f35..d40217aed 100644
--- a/attributes
+++ b/attributes
@@ -67,3 +67,6 @@ attribute bluetoothdomain;
 
 # All domains used for binder service domains.
 attribute binderservicedomain;
+
+# All domains that are excluded from the domain.te auditallow.
+attribute service_manager_local_audit;
diff --git a/bluetooth.te b/bluetooth.te
index 2b108a9e8..56fe17058 100644
--- a/bluetooth.te
+++ b/bluetooth.te
@@ -49,6 +49,15 @@ allow bluetooth bluetooth_prop:property_service set;
 allow bluetooth pan_result_prop:property_service set;
 allow bluetooth ctl_dhcp_pan_prop:property_service set;
 
+# Audited locally.
+service_manager_local_audit_domain(bluetooth)
+auditallow bluetooth {
+    service_manager_type
+    -bluetooth_service
+    -radio_service
+    -system_server_service
+}:service_manager find;
+
 ###
 ### Neverallow rules
 ###
diff --git a/bootanim.te b/bootanim.te
index 3a0a76f0f..759229553 100644
--- a/bootanim.te
+++ b/bootanim.te
@@ -11,3 +11,7 @@ allow bootanim gpu_device:chr_file rw_file_perms;
 
 # /oem access
 allow bootanim oemfs:dir search;
+
+# Audited locally.
+service_manager_local_audit_domain(bootanim)
+auditallow bootanim { service_manager_type -surfaceflinger_service }:service_manager find;
diff --git a/domain.te b/domain.te
index ba4c65ac0..015274bf0 100644
--- a/domain.te
+++ b/domain.te
@@ -159,7 +159,9 @@ allow domain asec_public_file:file r_file_perms;
 allow domain { asec_public_file asec_apk_file }:dir r_dir_perms;
 
 allow domain servicemanager:service_manager list;
+auditallow domain servicemanager:service_manager list;
 allow domain service_manager_type:service_manager find;
+auditallow { domain -service_manager_local_audit } service_manager_type:service_manager find;
 
 ###
 ### neverallow rules
diff --git a/drmserver.te b/drmserver.te
index 1d6b07552..2a146b6bb 100644
--- a/drmserver.te
+++ b/drmserver.te
@@ -47,4 +47,12 @@ allow drmserver radio_data_file:file { read getattr };
 
 allow drmserver drmserver_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(drmserver)
+auditallow drmserver {
+    service_manager_type
+    -drmserver_service
+    -system_server_service
+}:service_manager find;
+
 selinux_check_access(drmserver)
diff --git a/dumpstate.te b/dumpstate.te
index b2870bcc0..481febad2 100644
--- a/dumpstate.te
+++ b/dumpstate.te
@@ -100,3 +100,18 @@ allow dumpstate net_data_file:file r_file_perms;
 # Access /data/tombstones.
 allow dumpstate tombstone_data_file:dir r_dir_perms;
 allow dumpstate tombstone_data_file:file r_file_perms;
+
+service_manager_local_audit_domain(dumpstate)
+auditallow dumpstate {
+    service_manager_type
+    -drmserver_service
+    -healthd_service
+    -inputflinger_service
+    -keystore_service
+    -mediaserver_service
+    -nfc_service
+    -radio_service
+    -surfaceflinger_service
+    -system_app_service
+    -system_server_service
+}:service_manager find;
diff --git a/healthd.te b/healthd.te
index e7e165a84..3cb69bf8e 100644
--- a/healthd.te
+++ b/healthd.te
@@ -40,6 +40,10 @@ allow healthd self:capability sys_boot;
 
 allow healthd healthd_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(healthd)
+auditallow healthd { service_manager_type -healthd_service }:service_manager find;
+
 # Healthd needs to tell init to continue the boot
 # process when running in charger mode.
 unix_socket_connect(healthd, property, init)
diff --git a/inputflinger.te b/inputflinger.te
index 283bbbaf3..4377a104f 100644
--- a/inputflinger.te
+++ b/inputflinger.te
@@ -9,3 +9,7 @@ binder_service(inputflinger)
 binder_call(inputflinger, system_server)
 
 allow inputflinger inputflinger_service:service_manager add;
+
+# Audited locally.
+service_manager_local_audit_domain(inputflinger)
+auditallow inputflinger { service_manager_type -inputflinger_service }:service_manager find;
diff --git a/isolated_app.te b/isolated_app.te
index a156838bb..5929b2593 100644
--- a/isolated_app.te
+++ b/isolated_app.te
@@ -18,3 +18,12 @@ net_domain(isolated_app)
 # Needed to allow dlopen() from Chrome renderer processes.
 # See b/15902433 for details.
 allow isolated_app app_data_file:file execute;
+
+# Audited locally.
+service_manager_local_audit_domain(isolated_app)
+auditallow isolated_app {
+    service_manager_type
+    -radio_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
diff --git a/keystore.te b/keystore.te
index afa701c7e..f2c5039b0 100644
--- a/keystore.te
+++ b/keystore.te
@@ -28,5 +28,9 @@ neverallow domain keystore:process ptrace;
 
 allow keystore keystore_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(keystore)
+auditallow keystore { service_manager_type -keystore_service }:service_manager find;
+
 # Check SELinux permissions.
 selinux_check_access(keystore)
diff --git a/mediaserver.te b/mediaserver.te
index ce3dc0d55..3eb078d4b 100644
--- a/mediaserver.te
+++ b/mediaserver.te
@@ -80,6 +80,16 @@ allow mediaserver tee:unix_stream_socket connectto;
 
 allow mediaserver mediaserver_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(mediaserver)
+auditallow mediaserver {
+    service_manager_type
+    -drmserver_service
+    -mediaserver_service
+    -system_server_service
+    -surfaceflinger_service
+}:service_manager find;
+
 use_drmservice(mediaserver)
 allow mediaserver drmserver:drmservice {
     consumeRights
diff --git a/nfc.te b/nfc.te
index 65aaef76c..2b851a276 100644
--- a/nfc.te
+++ b/nfc.te
@@ -15,3 +15,12 @@ allow nfc sysfs_nfc_power_writable:file rw_file_perms;
 allow nfc sysfs:file write;
 
 allow nfc nfc_service:service_manager add;
+
+# Audited locally.
+service_manager_local_audit_domain(nfc)
+auditallow nfc {
+    service_manager_type
+    -mediaserver_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
diff --git a/platform_app.te b/platform_app.te
index 7ff8d62e2..a44e35d8a 100644
--- a/platform_app.te
+++ b/platform_app.te
@@ -27,3 +27,13 @@ allow platform_app media_rw_data_file:file create_file_perms;
 # Write to /cache.
 allow platform_app cache_file:dir create_dir_perms;
 allow platform_app cache_file:file create_file_perms;
+
+# Audited locally.
+service_manager_local_audit_domain(platform_app)
+auditallow platform_app {
+    service_manager_type
+    -mediaserver_service
+    -radio_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
diff --git a/radio.te b/radio.te
index d0018eac2..5f45df33c 100644
--- a/radio.te
+++ b/radio.te
@@ -28,3 +28,13 @@ auditallow radio system_radio_prop:property_service set;
 allow radio ctl_rildaemon_prop:property_service set;
 
 allow radio radio_service:service_manager add;
+
+# Audited locally.
+service_manager_local_audit_domain(radio)
+auditallow radio {
+    service_manager_type
+    -mediaserver_service
+    -radio_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
diff --git a/surfaceflinger.te b/surfaceflinger.te
index c50861209..ff91993ec 100644
--- a/surfaceflinger.te
+++ b/surfaceflinger.te
@@ -59,6 +59,14 @@ allow surfaceflinger tee_device:chr_file rw_file_perms;
 
 allow surfaceflinger surfaceflinger_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(surfaceflinger)
+auditallow surfaceflinger {
+    service_manager_type
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
+
 ###
 ### Neverallow rules
 ###
diff --git a/system_app.te b/system_app.te
index 2a7421b39..5a5888f2f 100644
--- a/system_app.te
+++ b/system_app.te
@@ -64,3 +64,14 @@ allow system_app keystore:keystore_key {
 };
 
 control_logd(system_app)
+
+# Audited locally.
+service_manager_local_audit_domain(system_app)
+auditallow system_app {
+    service_manager_type
+    -keystore_service
+    -nfc_service
+    -radio_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
diff --git a/system_server.te b/system_server.te
index c5e7b58f3..8ecfe5277 100644
--- a/system_server.te
+++ b/system_server.te
@@ -364,6 +364,9 @@ allow system_server pstorefs:file r_file_perms;
 
 allow system_server system_server_service:service_manager add;
 
+# Audited locally.
+service_manager_local_audit_domain(system_server)
+
 allow system_server keystore:keystore_key {
 	test
 	get
diff --git a/te_macros b/te_macros
index fdcfe87db..f18cd36d5 100644
--- a/te_macros
+++ b/te_macros
@@ -109,6 +109,7 @@ typeattribute $1 appdomain;
 tmpfs_domain($1)
 # Map with PROT_EXEC.
 allow $1 $1_tmpfs:file execute;
+service_manager_local_audit_domain($1)
 ')
 
 #####################################
@@ -360,6 +361,13 @@ define(`use_keystore', `
 ')
 
 ###########################################
+# service_manager_local_audit_domain(domain)
+# Has its own auditallow rule on service_manager
+# and should be excluded from the domain.te auditallow.
+define(`service_manager_local_audit_domain', `
+  typeattribute $1 service_manager_local_audit;
+')
+
 # use_drmservice(domain)
 # Ability to use DrmService which requires
 # DrmService to call getpidcon.
diff --git a/untrusted_app.te b/untrusted_app.te
index f29149e3d..c97b4513b 100644
--- a/untrusted_app.te
+++ b/untrusted_app.te
@@ -64,6 +64,19 @@ allow untrusted_app media_rw_data_file:file create_file_perms;
 allow untrusted_app cache_file:dir create_dir_perms;
 allow untrusted_app cache_file:file create_file_perms;
 
+# Audited locally.
+service_manager_local_audit_domain(untrusted_app)
+auditallow untrusted_app {
+    service_manager_type
+    -drmserver_service
+    -keystore_service
+    -mediaserver_service
+    -nfc_service
+    -radio_service
+    -surfaceflinger_service
+    -system_server_service
+}:service_manager find;
+
 ###
 ### neverallow rules
 ###
-- 
GitLab