# 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
    -diced
    -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 rw_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;
