type runas, domain, mlstrustedsubject;
type runas_exec, file_type;

bool support_runas true;

if (support_runas) {

# ndk-gdb invokes adb shell ps to find the app PID.
r_dir_file(shell, untrusted_app)
dontaudit shell domain:dir r_dir_perms;
dontaudit shell domain:file r_file_perms;

# ndk-gdb invokes adb shell ls to check the app data dir.
allow shell app_data_file:dir search;

# ndk-gdb invokes adb shell kill -9 to kill the gdbserver.
allow shell untrusted_app:process sigkill;
dontaudit shell self:capability { sys_ptrace kill };

# ndk-gdb invokes adb shell run-as.
domain_auto_trans(shell, runas_exec, runas)
allow runas shell:fd  use;
allow runas devpts:chr_file { read write };

# run-as reads package information.
allow runas system_data_file:file r_file_perms;

# run-as checks and changes to the app data dir.
dontaudit runas self:capability dac_override;
allow runas self:capability dac_read_search;
allow runas app_data_file:dir { getattr search };

# run-as switches to the app UID/GID.
allow runas self:capability { setuid setgid };

# run-as switches to the app security context.
allow runas rootfs:file r_file_perms; # read /seapp_contexts
selinux_check_context(runas) # validate context
allow runas untrusted_app:process dyntransition; # setcon

# run-as runs lib/gdbserver from the app data dir.
allow untrusted_app system_data_file:file rx_file_perms;

# run-as may also run sh or system commands.
allow untrusted_app shell_exec:file rx_file_perms;
allow untrusted_app system_file:file rx_file_perms;

# gdbserver reads the zygote.
allow untrusted_app zygote_exec:file r_file_perms;

# (grand)child death notification.
allow untrusted_app shell:process sigchld;

# child shell or gdbserver pty access.
allow untrusted_app devpts:chr_file { getattr read write };

# gdbserver creates a socket in the app data dir.
allow untrusted_app app_data_file:sock_file { create unlink };

# ndk-gdb invokes adb forward to forward the gdbserver socket.
allow adbd app_data_file:dir search;
allow adbd app_data_file:sock_file write;
allow adbd untrusted_app:unix_stream_socket connectto;

# ndk-gdb invokes adb pull of app_process, linker, and libc.so.
allow adbd zygote_exec:file r_file_perms;
allow adbd system_file:file r_file_perms;

}
