# llkd Live LocK Daemon
typeattribute llkd coredomain;

init_daemon_domain(llkd)

get_prop(llkd, llkd_prop)

allow llkd self:global_capability_class_set kill;
userdebug_or_eng(`
  allow llkd self:global_capability_class_set { sys_ptrace sys_admin };
  allow llkd self:global_capability_class_set { dac_override dac_read_search };
')

# llkd optionally locks itself in memory, to prevent it from being
# swapped out and unable to discover a kernel in live-lock state.
allow llkd self:global_capability_class_set ipc_lock;

# Send kill signals to _anyone_ suffering from Live Lock
allow llkd domain:process sigkill;

# read stack to check for Live Lock
userdebug_or_eng(`
  allow llkd {
    domain
    -apexd
    -kernel
    -keystore
    -init
    -llkd
    -ueventd
    -vendor_init
  }:process ptrace;
')

# live lock watchdog process allowed to look through /proc/
allow llkd domain:dir r_dir_perms;
allow llkd domain:file r_file_perms;
allow llkd domain:lnk_file read;
# Set /proc/sys/kernel/hung_task_*
allow llkd proc_hung_task:file rw_file_perms;

# live lock watchdog process allowed to dump process trace and
# reboot because orderly shutdown may not be possible.
allow llkd proc_sysrq:file w_file_perms;
allow llkd kmsg_device:chr_file w_file_perms;

### neverallow rules

neverallow { domain -init } llkd:process { dyntransition transition };
neverallow { domain userdebug_or_eng(`-crash_dump') } llkd:process ptrace;

# never honor LD_PRELOAD
neverallow * llkd:process noatsecure;
