| typeattribute crash_dump coredomain; |
| |
| # Crash dump does not need to access devices passed across exec(). |
| dontaudit crash_dump { devpts dev_type }:chr_file { read write }; |
| |
| allow crash_dump { |
| domain |
| -apexd |
| -bpfloader |
| -crash_dump |
| -init |
| -kernel |
| -keystore |
| -llkd |
| -logd |
| -ueventd |
| -vendor_init |
| -vold |
| }:process { ptrace signal sigchld sigstop sigkill }; |
| |
| userdebug_or_eng(` |
| allow crash_dump { |
| apexd |
| keystore |
| llkd |
| logd |
| vold |
| }:process { ptrace signal sigchld sigstop sigkill }; |
| ') |
| |
| # Read ART APEX data directory |
| allow crash_dump apex_art_data_file:dir { getattr search }; |
| allow crash_dump apex_art_data_file:file r_file_perms; |
| |
| # Allow crash dump to read bootstrap libraries |
| allow crash_dump system_bootstrap_lib_file:dir { getattr search }; |
| allow crash_dump system_bootstrap_lib_file:file r_file_perms; |
| |
| # Read Vendor APEX directories |
| allow crash_dump vendor_apex_metadata_file:dir { getattr search }; |
| |
| # crash_dump might inherit CAP_SYS_PTRACE from a privileged process, |
| # which will result in an audit log even when it's allowed to trace. |
| dontaudit crash_dump self:global_capability_class_set { sys_ptrace }; |
| |
| userdebug_or_eng(` |
| allow crash_dump logd:process { ptrace signal sigchld sigstop sigkill }; |
| |
| # Let crash_dump write to /dev/kmsg_debug crashes that happen before logd comes up. |
| allow crash_dump kmsg_debug_device:chr_file { open append }; |
| ') |
| |
| # Use inherited file descriptors |
| allow crash_dump domain:fd use; |
| |
| # Read/write IPC pipes inherited from crashing processes. |
| allow crash_dump domain:fifo_file { read write }; |
| |
| # Append to pipes given to us by processes requesting dumps (e.g. dumpstate) |
| allow crash_dump domain:fifo_file { append }; |
| |
| # Read information from /proc/$PID. |
| allow crash_dump domain:process getattr; |
| |
| r_dir_file(crash_dump, domain) |
| allow crash_dump exec_type:file r_file_perms; |
| |
| # Read /data/dalvik-cache. |
| allow crash_dump dalvikcache_data_file:dir { search getattr }; |
| allow crash_dump dalvikcache_data_file:file r_file_perms; |
| |
| # Read APEX data directories. |
| allow crash_dump apex_module_data_file:dir { getattr search }; |
| |
| # Read uptime |
| allow crash_dump proc_uptime:file r_file_perms; |
| |
| # Read APK files. |
| r_dir_file(crash_dump, apk_data_file); |
| |
| # Read all /vendor |
| r_dir_file(crash_dump, { vendor_file same_process_hal_file }) |
| |
| # Read all /data/local/tests |
| r_dir_file(crash_dump, shell_test_data_file) |
| |
| # Talk to tombstoned |
| unix_socket_connect(crash_dump, tombstoned_crash, tombstoned) |
| |
| # Talk to ActivityManager. |
| unix_socket_connect(crash_dump, system_ndebug, system_server) |
| |
| # Append to ANR files. |
| allow crash_dump anr_data_file:file { append getattr }; |
| |
| # Append to tombstone files. |
| allow crash_dump tombstone_data_file:file { append getattr }; |
| |
| # crash_dump writes out logcat logs at the bottom of tombstones, |
| # which is super useful in some cases. |
| unix_socket_connect(crash_dump, logdr, logd) |
| |
| # Crash dump is not intended to access the following files. Since these |
| # are WAI, suppress the denials to clean up the logs. |
| dontaudit crash_dump { |
| core_data_file_type |
| vendor_file_type |
| }:dir search; |
| dontaudit crash_dump system_data_file:{ lnk_file file } read; |
| dontaudit crash_dump property_type:file read; |
| |
| get_prop(crash_dump, misctrl_prop) |
| |
| ### |
| ### neverallow assertions |
| ### |
| |
| # A domain transition must occur for crash_dump to get the privileges needed to trace the process. |
| # Do not allow the execution of crash_dump without a domain transition. |
| neverallow domain crash_dump_exec:file execute_no_trans; |
| |
| # sigchld not explicitly forbidden since it's part of the |
| # domain-transition-on-exec macros, and is by itself not sensitive |
| neverallow crash_dump { |
| apexd |
| userdebug_or_eng(`-apexd') |
| bpfloader |
| init |
| kernel |
| keystore |
| userdebug_or_eng(`-keystore') |
| llkd |
| userdebug_or_eng(`-llkd') |
| logd |
| userdebug_or_eng(`-logd') |
| ueventd |
| vendor_init |
| vold |
| userdebug_or_eng(`-vold') |
| }:process { ptrace signal sigstop sigkill }; |
| |
| neverallow crash_dump self:process ptrace; |
| neverallow crash_dump gpu_device:chr_file *; |