# Transition to crash_dump when /system/bin/crash_dump* is executed.
# This occurs when the process crashes.
domain_auto_trans(domain, crash_dump_exec, crash_dump);
allow domain crash_dump:process sigchld;

# Limit ability to ptrace or read sensitive /proc/pid files of processes
# with other UIDs to these whitelisted domains.
neverallow {
  domain
  -vold
  -dumpstate
  -storaged
  -system_server
  userdebug_or_eng(`-perfprofd')
} self:global_capability_class_set sys_ptrace;

# Limit ability to generate hardware unique device ID attestations to priv_apps
neverallow { domain -priv_app } *:keystore_key gen_unique_id;

# Core domains are not permitted to use kernel interfaces which are not
# explicitly labeled.
# TODO(b/65643247): Apply these neverallow rules to all coredomain.
full_treble_only(`
  # /proc
  neverallow {
    coredomain
    -dumpstate
    -platform_app
    -priv_app
    -system_app
    -vold
    -vendor_init
  } proc:file no_rw_file_perms;

  # /sys
  neverallow {
    coredomain
    -dumpstate
    -init
    -priv_app
    -system_app
    -ueventd
    -vold
    -vendor_init
  } sysfs:file no_rw_file_perms;

  # /dev
  neverallow {
    coredomain
    -fsck
    -init
    -ueventd
    -vendor_init
  } device:{ blk_file file } no_rw_file_perms;

  # debugfs
  neverallow {
    coredomain
    -dumpstate
    -init
    -system_server
    -vendor_init
  } debugfs:file no_rw_file_perms;

  # tracefs
  neverallow {
    coredomain
    userdebug_or_eng(`-atrace')
    -dumpstate
    -init
    userdebug_or_eng(`-perfprofd')
    userdebug_or_eng(`-traced_probes')
    -shell
    userdebug_or_eng(`-traceur_app')
    -vendor_init
  } debugfs_tracing:file no_rw_file_perms;

  # inotifyfs
  neverallow {
    coredomain
    -init
    -vendor_init
  } inotify:file no_rw_file_perms;

  # pstorefs
  neverallow {
    coredomain
    -bootstat
    -charger
    -dumpstate
    -healthd
    -init
    -logd
    -logpersist
    -recovery_persist
    -recovery_refresh
    -shell
    -system_server
    -vendor_init
  } pstorefs:file no_rw_file_perms;

  # configfs
  neverallow {
    coredomain
    -init
    -system_server
    -vendor_init
  } configfs:file no_rw_file_perms;

  # functionfs
  neverallow {
    coredomain
    -adbd
    -init
    -mediaprovider
    -vendor_init
  }functionfs:file no_rw_file_perms;

  # usbfs and binfmt_miscfs
  neverallow {
    coredomain
    -init
    -vendor_init
  }{ usbfs binfmt_miscfs }:file no_rw_file_perms;
')
