STOPSHIP: sys.vdso reflector for experiments

On userdebug or eng, permit vdso to be enabled or disabled at will to
manage performance experiments on the dogfood population.

ro.debuggable=1 -> permit sys.vdso to maintain an influence over vdso
sys.vdso=false  -> 32 and 64 bit vdso disabled
sys.vdso=32     -> 64 bit vdso disabled
sys.vdso=64     -> 32 bit vdso disabled
sys.vdso=       -> 32 and 64 bit vdso enabled

NB: sys.vdso set to any other value will default to vdso enabled.

Test: manual, bionic-benchmarks --bionic_xml=vdso.xml to confirm.
Bug: 70518189
Change-Id: I839feff206a1404f228a5bdf35fb0c392fd8974a
diff --git a/init.common.diag.rc.userdebug b/init.common.diag.rc.userdebug
index 08d063e..6a074bc 100644
--- a/init.common.diag.rc.userdebug
+++ b/init.common.diag.rc.userdebug
@@ -134,3 +134,18 @@
 on property:sys.logger.bluetooth=false
    setprop persist.service.bdroid.snooplog false
    setprop persist.service.bdroid.fwsnoop false
+
+# b/70518189 vDSO experiments
+on property:sys.vdso=*
+   write /sys/module/vdso/parameters/enable_32 1
+   write /sys/module/vdso/parameters/enable_64 1
+
+on property:sys.vdso=false
+   write /sys/module/vdso/parameters/enable_32 0
+   write /sys/module/vdso/parameters/enable_64 0
+
+on property:sys.vdso=64
+   write /sys/module/vdso/parameters/enable_32 0
+
+on property:sys.vdso=32
+   write /sys/module/vdso/parameters/enable_64 0
diff --git a/sepolicy/file.te b/sepolicy/file.te
index 65e94ad..1cf90f0 100644
--- a/sepolicy/file.te
+++ b/sepolicy/file.te
@@ -36,6 +36,8 @@
 type sysfs_wifi, sysfs_type, fs_type, mlstrustedobject;
 type sysfs_diag, fs_type, sysfs_type;
 type sysfs_scsi_devices_0000, sysfs_type, fs_type;
+# b/70518189 vDSO experiments
+type sysfs_vdso, fs_type, sysfs_type;
 
 # debugfs
 type debugfs_msm_core, debugfs_type, fs_type;
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index 60fd33b..03d3ec3 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -202,3 +202,6 @@
 
 # hidraw dynamic sensor
 /dev/hidraw[0-9]+            u:object_r:sensors_device:s0
+
+# b/70518189 vDSO experiments
+/sys/module/vdso/parameters  u:object_r:sysfs_vdso:s0
diff --git a/sepolicy/init.te b/sepolicy/init.te
index df9d146..4104ae3 100644
--- a/sepolicy/init.te
+++ b/sepolicy/init.te
@@ -10,3 +10,8 @@
 allow init firmware_file:dir mounton;
 allow init persist_file:dir mounton;
 allow init userdata_block_device:blk_file { write };
+
+# b/70518189 vDSO experiments
+userdebug_or_eng(`
+allow init sysfs_vdso:file w_file_perms;
+')