Merge "Sepolicy: Give sys_admin for relabel"
diff --git a/private/apexd.te b/private/apexd.te
index 5b27101..3282cfc 100644
--- a/private/apexd.te
+++ b/private/apexd.te
@@ -10,6 +10,11 @@
 allow apexd apex_data_file:dir create_dir_perms;
 allow apexd apex_data_file:file create_file_perms;
 
+# Allow creating, reading and writing of APEX files/dirs in the APEX metadata dir
+allow apexd metadata_file:dir search;
+allow apexd apex_metadata_file:dir create_dir_perms;
+allow apexd apex_metadata_file:file create_file_perms;
+
 # allow apexd to create loop devices with /dev/loop-control
 allow apexd loop_control_device:chr_file rw_file_perms;
 # allow apexd to access loop devices
@@ -99,5 +104,7 @@
 ')
 
 neverallow { domain -apexd -init } apex_data_file:dir no_w_dir_perms;
+neverallow { domain -apexd -init } apex_metadata_file:dir no_w_dir_perms;
 neverallow { domain -apexd -init -kernel } apex_data_file:file no_w_file_perms;
+neverallow { domain -apexd -init -kernel } apex_metadata_file:file no_w_file_perms;
 neverallow { domain -apexd } apex_mnt_dir:lnk_file no_w_file_perms;
diff --git a/private/compat/26.0/26.0.ignore.cil b/private/compat/26.0/26.0.ignore.cil
index f8efdb2..d8c6e0a 100644
--- a/private/compat/26.0/26.0.ignore.cil
+++ b/private/compat/26.0/26.0.ignore.cil
@@ -10,6 +10,7 @@
     adbd_exec
     app_binding_service
     apex_data_file
+    apex_metadata_file
     apex_mnt_dir
     apex_key_file
     apex_service
diff --git a/private/compat/27.0/27.0.ignore.cil b/private/compat/27.0/27.0.ignore.cil
index 1129259..fbd26a1 100644
--- a/private/compat/27.0/27.0.ignore.cil
+++ b/private/compat/27.0/27.0.ignore.cil
@@ -9,6 +9,7 @@
     adb_service
     app_binding_service
     apex_data_file
+    apex_metadata_file
     apex_mnt_dir
     apex_key_file
     apex_service
diff --git a/private/compat/28.0/28.0.ignore.cil b/private/compat/28.0/28.0.ignore.cil
index 70ceaca..1b76c38 100644
--- a/private/compat/28.0/28.0.ignore.cil
+++ b/private/compat/28.0/28.0.ignore.cil
@@ -8,6 +8,7 @@
     activity_task_service
     adb_service
     apex_data_file
+    apex_metadata_file
     apex_mnt_dir
     apex_key_file
     apex_service
diff --git a/private/file_contexts b/private/file_contexts
index 33b4e18..9625acc 100644
--- a/private/file_contexts
+++ b/private/file_contexts
@@ -617,6 +617,7 @@
 # Metadata files
 #
 /metadata(/.*)?           u:object_r:metadata_file:s0
+/metadata/apex(/.*)?      u:object_r:apex_metadata_file:s0
 /metadata/vold(/.*)?      u:object_r:vold_metadata_file:s0
 /metadata/gsi(/.*)?       u:object_r:gsi_metadata_file:s0
 /metadata/password_slots(/.*)?    u:object_r:password_slot_metadata_file:s0
diff --git a/private/system_server.te b/private/system_server.te
index a2cbc6f..082351d 100644
--- a/private/system_server.te
+++ b/private/system_server.te
@@ -120,12 +120,8 @@
 allow system_server mediaserver:process { getsched setsched };
 allow system_server bootanim:process { getsched setsched };
 
-# Allow system_server to write to /proc/<pid>/timerslack_ns
-allow system_server appdomain:file w_file_perms;
-allow system_server audioserver:file w_file_perms;
-allow system_server cameraserver:file w_file_perms;
-allow system_server hal_audio_server:file w_file_perms;
-allow system_server hal_omx_server:file w_file_perms;
+# Allow system_server to write to /proc/<pid>/*
+allow system_server domain:file w_file_perms;
 
 # Read /proc/pid data for all domains. This is used by ProcessCpuTracker
 # within system_server to keep track of memory and CPU usage for
diff --git a/public/file.te b/public/file.te
index 65b10d6..256bca5 100644
--- a/public/file.te
+++ b/public/file.te
@@ -201,6 +201,8 @@
 type gsi_metadata_file, file_type;
 # system_server shares Weaver slot information in /metadata
 type password_slot_metadata_file, file_type;
+# APEX files within /metadata
+type apex_metadata_file, file_type;
 
 # Type for /dev/cpu_variant:.*.
 type dev_cpu_variant, file_type;
diff --git a/public/property_contexts b/public/property_contexts
index f56bf53..2589941 100644
--- a/public/property_contexts
+++ b/public/property_contexts
@@ -353,25 +353,25 @@
 sys.shutdown.requested u:object_r:exported_system_prop:s0 exact string
 
 # Using Sysprop as API. So the ro.surface_flinger.* are guaranteed to be API-stable
-ro.surface_flinger.default_composition_dataspace u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.default_composition_pixel_format u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.force_hwc_copy_for_virtual_displays u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.has_HDR_display u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.has_wide_color_display u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.max_frame_buffer_acquired_buffers u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.max_virtual_display_dimension u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.primary_display_orientation u:object_r:exported_default_prop:s0 string
-ro.surface_flinger.present_time_offset_from_vsync_ns u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.running_without_sync_framework u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.start_graphics_allocator_service u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.use_color_management u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.use_context_priority u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.use_vr_flinger u:object_r:exported_default_prop:s0 bool
-ro.surface_flinger.vsync_event_phase_offset_ns u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.vsync_sf_event_phase_offset_ns u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.wcg_composition_dataspace u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.wcg_composition_pixel_format u:object_r:exported_default_prop:s0 int
-ro.surface_flinger.display_primary_red u:object_r:exported_default_prop:s0 string
-ro.surface_flinger.display_primary_green u:object_r:exported_default_prop:s0 string
-ro.surface_flinger.display_primary_blue u:object_r:exported_default_prop:s0 string
-ro.surface_flinger.display_primary_white u:object_r:exported_default_prop:s0 string
+ro.surface_flinger.default_composition_dataspace u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.default_composition_pixel_format u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.force_hwc_copy_for_virtual_displays u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.has_HDR_display u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.has_wide_color_display u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.max_frame_buffer_acquired_buffers u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.max_virtual_display_dimension u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.primary_display_orientation u:object_r:exported_default_prop:s0 exact string
+ro.surface_flinger.present_time_offset_from_vsync_ns u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.running_without_sync_framework u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.start_graphics_allocator_service u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.use_color_management u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.use_context_priority u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.use_vr_flinger u:object_r:exported_default_prop:s0 exact bool
+ro.surface_flinger.vsync_event_phase_offset_ns u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.vsync_sf_event_phase_offset_ns u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.wcg_composition_dataspace u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.wcg_composition_pixel_format u:object_r:exported_default_prop:s0 exact int
+ro.surface_flinger.display_primary_red u:object_r:exported_default_prop:s0 exact string
+ro.surface_flinger.display_primary_green u:object_r:exported_default_prop:s0 exact string
+ro.surface_flinger.display_primary_blue u:object_r:exported_default_prop:s0 exact string
+ro.surface_flinger.display_primary_white u:object_r:exported_default_prop:s0 exact string
diff --git a/public/vendor_init.te b/public/vendor_init.te
index 528d8ba..fd0d6e3 100644
--- a/public/vendor_init.te
+++ b/public/vendor_init.te
@@ -55,6 +55,7 @@
   -vendor_file_type
   -vold_metadata_file
   -gsi_metadata_file
+  -apex_metadata_file
 }:dir { create search getattr open read setattr ioctl write add_name remove_name rmdir relabelfrom };
 
 allow vendor_init unlabeled:{ dir notdevfile_class_set } { getattr relabelfrom };
@@ -70,6 +71,7 @@
   -vendor_file_type
   -vold_metadata_file
   -gsi_metadata_file
+  -apex_metadata_file
 }:file { create getattr open read write setattr relabelfrom unlink map };
 
 allow vendor_init {
@@ -82,6 +84,7 @@
   -vendor_file_type
   -vold_metadata_file
   -gsi_metadata_file
+  -apex_metadata_file
 }:{ sock_file fifo_file } { create getattr open read setattr relabelfrom unlink };
 
 allow vendor_init {
@@ -95,6 +98,7 @@
   -vendor_file_type
   -vold_metadata_file
   -gsi_metadata_file
+  -apex_metadata_file
 }:lnk_file { create getattr setattr relabelfrom unlink };
 
 allow vendor_init {
@@ -107,6 +111,7 @@
   -vendor_file_type
   -vold_metadata_file
   -gsi_metadata_file
+  -apex_metadata_file
 }:dir_file_class_set relabelto;
 
 allow vendor_init dev_type:dir create_dir_perms;