Allow system server to set dynamic ART properties.

This change gives a new type (dalvik_dynamic_config_prop) to some ART
properties such as dalvik.vm.dex2oat-cpu-set and adds a new rule to
allow system server to set them.

Bug: 274530433
Test: Locally added some code to set those properties and saw it being
  successfull.
Change-Id: Ie28602e9039b7647656594ce5c184d29778fa089
diff --git a/private/app.te b/private/app.te
index 5c3472d..1e99cb3 100644
--- a/private/app.te
+++ b/private/app.te
@@ -34,7 +34,7 @@
 get_prop(appdomain, test_harness_prop)
 
 get_prop(appdomain, boot_status_prop)
-get_prop(appdomain, dalvik_config_prop)
+get_prop(appdomain, dalvik_config_prop_type)
 get_prop(appdomain, media_config_prop)
 get_prop(appdomain, packagemanager_config_prop)
 get_prop(appdomain, radio_control_prop)
diff --git a/private/compat/33.0/33.0.cil b/private/compat/33.0/33.0.cil
index afcebba..8fa3985 100644
--- a/private/compat/33.0/33.0.cil
+++ b/private/compat/33.0/33.0.cil
@@ -1545,7 +1545,10 @@
 (typeattributeset ctl_sigstop_prop_33_0 (ctl_sigstop_prop))
 (typeattributeset ctl_start_prop_33_0 (ctl_start_prop))
 (typeattributeset ctl_stop_prop_33_0 (ctl_stop_prop))
-(typeattributeset dalvik_config_prop_33_0 (dalvik_config_prop))
+(typeattributeset dalvik_config_prop_33_0
+  ( dalvik_config_prop
+    dalvik_dynamic_config_prop
+))
 (typeattributeset dalvik_prop_33_0 (dalvik_prop))
 (typeattributeset dalvik_runtime_prop_33_0 (dalvik_runtime_prop))
 (typeattributeset dalvikcache_data_file_33_0 (dalvikcache_data_file))
diff --git a/private/composd.te b/private/composd.te
index 68dd993..409b2cb 100644
--- a/private/composd.te
+++ b/private/composd.te
@@ -35,7 +35,7 @@
 get_prop(composd, composd_vm_vendor_prop)
 
 # Read ART's properties
-get_prop(composd, dalvik_config_prop)
+get_prop(composd, dalvik_config_prop_type)
 get_prop(composd, device_config_runtime_native_boot_prop)
 
 # We never create any artifact files directly
diff --git a/private/coredomain.te b/private/coredomain.te
index 96ce488..f8b2ee5 100644
--- a/private/coredomain.te
+++ b/private/coredomain.te
@@ -1,7 +1,7 @@
 get_prop(coredomain, apex_ready_prop)
 get_prop(coredomain, boot_status_prop)
 get_prop(coredomain, camera_config_prop)
-get_prop(coredomain, dalvik_config_prop)
+get_prop(coredomain, dalvik_config_prop_type)
 get_prop(coredomain, dalvik_runtime_prop)
 get_prop(coredomain, exported_pm_prop)
 get_prop(coredomain, ffs_config_prop)
diff --git a/private/property.te b/private/property.te
index 9e49c30..2de1af5 100644
--- a/private/property.te
+++ b/private/property.te
@@ -275,7 +275,7 @@
     -vendor_init
   } {
     core_property_type
-    dalvik_config_prop
+    dalvik_config_prop_type
     extended_core_property_type
     exported3_system_prop
     systemsound_config_prop
diff --git a/private/property_contexts b/private/property_contexts
index 7324b61..00b2aee 100644
--- a/private/property_contexts
+++ b/private/property_contexts
@@ -407,31 +407,27 @@
 ro.vendor.camera.extensions.package u:object_r:camera2_extensions_prop:s0 exact string
 ro.vendor.camera.extensions.service u:object_r:camera2_extensions_prop:s0 exact string
 
-# ART properties
+# ART properties.
 dalvik.vm.                 u:object_r:dalvik_config_prop:s0
 ro.dalvik.vm.              u:object_r:dalvik_config_prop:s0
 ro.zygote                  u:object_r:dalvik_config_prop:s0 exact string
 
 # A set of ART properties listed explicitly for compatibility purposes.
-ro.dalvik.vm.native.bridge u:object_r:dalvik_config_prop:s0 exact string
+ro.dalvik.vm.native.bridge                    u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.always_debuggable                   u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.appimageformat                      u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.backgroundgctype                    u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.boot-dex2oat-cpu-set                u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.boot-dex2oat-threads                u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.boot-image                          u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.bgdexopt.new-classes-percent        u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.bgdexopt.new-methods-percent        u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.checkjni                            u:object_r:dalvik_config_prop:s0 exact bool
 dalvik.vm.dex2oat-Xms                         u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.dex2oat-Xmx                         u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.dex2oat-cpu-set                     u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.dex2oat-filter                      u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.dex2oat-flags                       u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.dex2oat-max-image-block-size        u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.dex2oat-minidebuginfo               u:object_r:dalvik_config_prop:s0 exact bool
 dalvik.vm.dex2oat-resolve-startup-strings     u:object_r:dalvik_config_prop:s0 exact bool
-dalvik.vm.dex2oat-threads                     u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.dex2oat-very-large                  u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.dex2oat-swap                        u:object_r:dalvik_config_prop:s0 exact bool
 dalvik.vm.dex2oat64.enabled                   u:object_r:dalvik_config_prop:s0 exact bool
@@ -450,10 +446,8 @@
 dalvik.vm.hot-startup-method-samples          u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.image-dex2oat-Xms                   u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.image-dex2oat-Xmx                   u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.image-dex2oat-cpu-set               u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.image-dex2oat-filter                u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.image-dex2oat-flags                 u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.image-dex2oat-threads               u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.isa.arm.features                    u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.isa.arm.variant                     u:object_r:dalvik_config_prop:s0 exact string
 dalvik.vm.isa.arm64.features                  u:object_r:dalvik_config_prop:s0 exact string
@@ -483,11 +477,21 @@
 dalvik.vm.profilebootclasspath                u:object_r:dalvik_config_prop:s0 exact bool
 dalvik.vm.ps-min-save-period-ms               u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.ps-resolved-classes-delay-ms        u:object_r:dalvik_config_prop:s0 exact int
-dalvik.vm.restore-dex2oat-cpu-set             u:object_r:dalvik_config_prop:s0 exact string
-dalvik.vm.restore-dex2oat-threads             u:object_r:dalvik_config_prop:s0 exact int
 dalvik.vm.usejit                              u:object_r:dalvik_config_prop:s0 exact bool
 dalvik.vm.zygote.max-boot-retry               u:object_r:dalvik_config_prop:s0 exact int
 
+# A list of ART properties that can be set dynamically.
+dalvik.vm.background-dex2oat-cpu-set          u:object_r:dalvik_dynamic_config_prop:s0 exact string
+dalvik.vm.background-dex2oat-threads          u:object_r:dalvik_dynamic_config_prop:s0 exact int
+dalvik.vm.boot-dex2oat-cpu-set                u:object_r:dalvik_dynamic_config_prop:s0 exact string
+dalvik.vm.boot-dex2oat-threads                u:object_r:dalvik_dynamic_config_prop:s0 exact int
+dalvik.vm.dex2oat-cpu-set                     u:object_r:dalvik_dynamic_config_prop:s0 exact string
+dalvik.vm.dex2oat-threads                     u:object_r:dalvik_dynamic_config_prop:s0 exact int
+dalvik.vm.image-dex2oat-cpu-set               u:object_r:dalvik_dynamic_config_prop:s0 exact string
+dalvik.vm.image-dex2oat-threads               u:object_r:dalvik_dynamic_config_prop:s0 exact int
+dalvik.vm.restore-dex2oat-cpu-set             u:object_r:dalvik_dynamic_config_prop:s0 exact string
+dalvik.vm.restore-dex2oat-threads             u:object_r:dalvik_dynamic_config_prop:s0 exact int
+
 persist.sys.dalvik.vm.lib.2 u:object_r:dalvik_runtime_prop:s0 exact string
 
 keyguard.no_require_sim u:object_r:keyguard_config_prop:s0 exact bool
diff --git a/private/sdk_sandbox.te b/private/sdk_sandbox.te
index cfcf2a4..fc4fce3 100644
--- a/private/sdk_sandbox.te
+++ b/private/sdk_sandbox.te
@@ -42,7 +42,7 @@
     -codec2_config_prop
     -config_prop
     -cppreopt_prop
-    -dalvik_config_prop
+    -dalvik_config_prop_type
     -dalvik_prop
     -dalvik_runtime_prop
     -dck_prop
diff --git a/private/system_server.te b/private/system_server.te
index 8d7057c..98d1c21 100644
--- a/private/system_server.te
+++ b/private/system_server.te
@@ -1527,3 +1527,6 @@
 # Only system server can write the font files.
 neverallow { domain -init -system_server } font_data_file:file no_w_file_perms;
 neverallow { domain -init -system_server } font_data_file:dir no_w_dir_perms;
+
+# Allow system server to set dynamic ART properties.
+set_prop(system_server, dalvik_dynamic_config_prop)