| type traced_probes, domain, coredomain; |
| type traced_probes_exec, system_file_type, exec_type, file_type; |
| type traced_probes_tmpfs, file_type; |
| |
| # Allow init to exec traced_probes daemon |
| init_daemon_domain(traced_probes) |
| |
| # The traced daemon uses shared memory supplied producers. And hence |
| # traced_probes daemon is a producer we need to have tmpfs_domain for it. |
| tmpfs_domain(traced_probes) |
| |
| # Write trace data to the Perfetto traced damon. This requires connecting to its |
| # producer socket and obtaining a (per-process) tmpfs fd. |
| perfetto_producer(traced_probes) |
| |
| # Allow traced_probes to access tracefs. |
| allow traced_probes debugfs_tracing:dir r_dir_perms; |
| allow traced_probes debugfs_tracing:file rw_file_perms; |
| allow traced_probes debugfs_trace_marker:file getattr; |
| allow traced_probes debugfs_tracing_printk_formats:file r_file_perms; |
| |
| # Allow to log to kernel dmesg when starting / stopping ftrace. |
| allow traced_probes kmsg_device:chr_file write; |
| |
| # Allow procfs access |
| r_dir_file(traced_probes, domain) |
| |
| # Allow traced_probes to run atrace. atrace pokes at system services to enable |
| # their userspace TRACE macros. |
| domain_auto_trans(traced_probes, atrace_exec, atrace) |
| |
| # Allow traced_probes to kill atrace on timeout. |
| allow traced_probes atrace:process sigkill; |
| |
| ### |
| ### Neverallow rules |
| ### |
| ### traced_probes should NEVER do any of this |
| |
| # Block device access. |
| neverallow traced_probes dev_type:blk_file { read write }; |
| |
| # ptrace any other app |
| # TODO(b/271562015): move this to domain level neverallow rule. |
| neverallow traced_probes domain:process ptrace; |
| |
| # Disallows access to /data files. |
| neverallow traced_probes { |
| data_file_type |
| -system_data_file |
| -system_data_root_file |
| -vendor_data_file |
| }:dir *; |
| |
| neverallow traced_probes system_data_file:dir ~{ getattr search }; |
| |
| neverallow traced_probes_exec data_file_type:file *; |
| |
| # Only init is allowed to enter the traced_probes domain via exec() |
| neverallow { domain -init } traced_probes:process transition; |
| neverallow * traced_probes:process dyntransition; |
| |