# Domain used when running /system/bin/simpleperf to record boot-time profiles.
# It is started by init process. It's only available on userdebug/eng build.

type simpleperf_boot, domain, coredomain, mlstrustedsubject;

# /data/simpleperf_boot_data, used to store boot-time profiles.
type simpleperf_boot_data_file, file_type;

userdebug_or_eng(`
  domain_auto_trans(init, simpleperf_exec, simpleperf_boot)

  # simpleperf_boot writes profile data to /data/simpleperf_boot_data.
  allow simpleperf_boot simpleperf_boot_data_file:file create_file_perms;
  allow simpleperf_boot simpleperf_boot_data_file:dir rw_dir_perms;

  # Allow simpleperf_boot full use of perf_event_open(2), to enable system wide profiling.
  allow simpleperf_boot self:perf_event { cpu kernel open read write };
  allow simpleperf_boot self:global_capability2_class_set perfmon;

  # Allow simpleperf_boot to scan through /proc/pid for all processes.
  r_dir_file(simpleperf_boot, domain)

  # Allow simpleperf_boot to read executable binaries.
  allow simpleperf_boot system_file_type:file r_file_perms;
  allow simpleperf_boot vendor_file_type:file r_file_perms;

  # Allow simpleperf_boot to search for and read kernel modules.
  allow simpleperf_boot vendor_file:dir r_dir_perms;
  allow simpleperf_boot vendor_kernel_modules:file r_file_perms;

  # Allow simpleperf_boot to read system bootstrap libs.
  allow simpleperf_boot system_bootstrap_lib_file:dir search;
  allow simpleperf_boot system_bootstrap_lib_file:file r_file_perms;

  # Allow simpleperf_boot to access tracefs.
  allow simpleperf_boot debugfs_tracing:dir r_dir_perms;
  allow simpleperf_boot debugfs_tracing:file rw_file_perms;
  allow simpleperf_boot debugfs_tracing_debug:dir r_dir_perms;
  allow simpleperf_boot debugfs_tracing_debug:file rw_file_perms;

  # Allow simpleperf_boot to write to perf_event_paranoid under /proc.
  allow simpleperf_boot proc_perf:file write;

  # Allow simpleperf_boot to read process maps.
  allow simpleperf_boot self:global_capability_class_set sys_ptrace;
  # Allow simpleperf_boot to read JIT debug info from system_server and zygote.
  allow simpleperf_boot { system_server zygote }:process ptrace;

  # Allow to temporarily lift the kptr_restrict setting and get kernel start address
  # by reading /proc/kallsyms, get module start address by reading /proc/modules.
  set_prop(simpleperf_boot, lower_kptr_restrict_prop)
  allow simpleperf_boot proc_kallsyms:file r_file_perms;
  allow simpleperf_boot proc_modules:file r_file_perms;

  # Allow simpleperf_boot to read kernel build id.
  allow simpleperf_boot sysfs_kernel_notes:file r_file_perms;

  dontaudit simpleperf_boot shell_data_file:dir search;
')
