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