2018-01-24 17:07:09 +01:00
|
|
|
# Perfetto command-line client. Can be used only from the domains that are
|
2020-07-31 20:28:11 +02:00
|
|
|
# explicitly allowlisted with a domain_auto_trans(X, perfetto_exec, perfetto).
|
2018-01-24 17:07:09 +01:00
|
|
|
# This command line client accesses the privileged socket of the traced
|
|
|
|
# daemon.
|
|
|
|
|
2018-09-27 19:21:37 +02:00
|
|
|
type perfetto_exec, system_file_type, exec_type, file_type;
|
2019-01-24 00:07:40 +01:00
|
|
|
type perfetto_tmpfs, file_type;
|
2018-01-24 17:07:09 +01:00
|
|
|
|
|
|
|
tmpfs_domain(perfetto);
|
|
|
|
|
2021-09-30 19:14:40 +02:00
|
|
|
# Allow init to start a trace (for perfetto_boottrace).
|
|
|
|
init_daemon_domain(perfetto)
|
|
|
|
|
2018-01-24 17:07:09 +01:00
|
|
|
# Allow to access traced's privileged consumer socket.
|
|
|
|
unix_socket_connect(perfetto, traced_consumer, traced)
|
|
|
|
|
2019-04-04 20:19:40 +02:00
|
|
|
# Connect to the Perfetto traced daemon as a producer. This requires
|
|
|
|
# connecting to its producer socket and obtaining a (per-process) tmpfs fd.
|
2019-10-08 17:15:14 +02:00
|
|
|
perfetto_producer(perfetto)
|
2019-04-04 20:19:40 +02:00
|
|
|
|
2018-01-24 17:07:09 +01:00
|
|
|
# Allow to write and unlink traces into /data/misc/perfetto-traces.
|
|
|
|
allow perfetto perfetto_traces_data_file:dir rw_dir_perms;
|
|
|
|
allow perfetto perfetto_traces_data_file:file create_file_perms;
|
|
|
|
|
|
|
|
# Allow to access binder to pass the traces to Dropbox.
|
|
|
|
binder_use(perfetto)
|
|
|
|
binder_call(perfetto, system_server)
|
|
|
|
allow perfetto dropbox_service:service_manager find;
|
|
|
|
|
2020-10-13 22:13:09 +02:00
|
|
|
# Allow perfetto to read the trace config from /data/misc/perfetto-configs.
|
|
|
|
# shell and adb can write files into that directory.
|
|
|
|
allow perfetto perfetto_configs_data_file:dir r_dir_perms;
|
|
|
|
allow perfetto perfetto_configs_data_file:file r_file_perms;
|
|
|
|
|
2021-03-16 19:30:36 +01:00
|
|
|
# Allow perfetto to read the trace config from statsd, mm_events and shell
|
2018-11-16 16:52:55 +01:00
|
|
|
# (both root and non-root) on stdin and also to write the resulting trace to
|
|
|
|
# stdout.
|
2021-03-16 19:30:36 +01:00
|
|
|
allow perfetto { statsd mm_events shell su }:fd use;
|
|
|
|
allow perfetto { statsd mm_events shell su }:fifo_file { getattr read write };
|
2018-01-24 17:07:09 +01:00
|
|
|
|
|
|
|
# Allow to communicate use, read and write over the adb connection.
|
|
|
|
allow perfetto adbd:fd use;
|
|
|
|
allow perfetto adbd:unix_stream_socket { read write };
|
|
|
|
|
2019-11-01 13:53:18 +01:00
|
|
|
# Allow adbd to reap perfetto.
|
2018-01-24 17:07:09 +01:00
|
|
|
allow perfetto adbd:process { sigchld };
|
|
|
|
|
2019-11-01 13:53:18 +01:00
|
|
|
# Allow perfetto to write to statsd.
|
|
|
|
unix_socket_send(perfetto, statsdw, statsd)
|
|
|
|
|
2018-01-24 17:07:09 +01:00
|
|
|
# Allow to access /dev/pts when launched in an adb shell.
|
|
|
|
allow perfetto devpts:chr_file rw_file_perms;
|
|
|
|
|
2019-05-29 18:50:44 +02:00
|
|
|
# Allow perfetto to ask incidentd to start a report.
|
2020-03-26 17:19:21 +01:00
|
|
|
allow perfetto incident_service:service_manager find;
|
|
|
|
binder_call(perfetto, incidentd)
|
2019-05-29 18:50:44 +02:00
|
|
|
|
2020-03-24 22:39:41 +01:00
|
|
|
# perfetto log formatter calls isatty() on its stderr. Denial when running
|
|
|
|
# under adbd is harmless. Avoid generating denial logs.
|
|
|
|
dontaudit perfetto adbd:unix_stream_socket getattr;
|
|
|
|
dontauditxperm perfetto adbd:unix_stream_socket ioctl unpriv_tty_ioctls;
|
|
|
|
# As above, when adbd is running in "su" domain (only the ioctl is denied in
|
|
|
|
# practice).
|
|
|
|
dontauditxperm perfetto su:unix_stream_socket ioctl unpriv_tty_ioctls;
|
2020-06-22 20:35:14 +02:00
|
|
|
# Similarly, CTS tests end up hitting a denial on shell pipes.
|
|
|
|
dontauditxperm perfetto shell:fifo_file ioctl unpriv_tty_ioctls;
|
2020-03-24 22:39:41 +01:00
|
|
|
|
2018-01-24 17:07:09 +01:00
|
|
|
###
|
|
|
|
### Neverallow rules
|
|
|
|
###
|
|
|
|
### perfetto should NEVER do any of this
|
|
|
|
|
|
|
|
# Disallow mapping executable memory (execstack and exec are already disallowed
|
|
|
|
# globally in domain.te).
|
|
|
|
neverallow perfetto self:process execmem;
|
|
|
|
|
|
|
|
# Block device access.
|
|
|
|
neverallow perfetto dev_type:blk_file { read write };
|
|
|
|
|
|
|
|
# ptrace any other process
|
|
|
|
neverallow perfetto domain:process ptrace;
|
|
|
|
|
|
|
|
# Disallows access to other /data files.
|
2018-02-08 01:29:06 +01:00
|
|
|
neverallow perfetto {
|
|
|
|
data_file_type
|
|
|
|
-system_data_file
|
2019-08-02 00:57:47 +02:00
|
|
|
-system_data_root_file
|
2018-02-08 01:29:06 +01:00
|
|
|
# TODO(b/72998741) Remove exemption. Further restricted in a subsequent
|
|
|
|
# neverallow. Currently only getattr and search are allowed.
|
|
|
|
-vendor_data_file
|
|
|
|
-zoneinfo_data_file
|
|
|
|
-perfetto_traces_data_file
|
2020-10-13 22:13:09 +02:00
|
|
|
-perfetto_configs_data_file
|
2019-06-14 00:05:15 +02:00
|
|
|
with_native_coverage(`-method_trace_data_file')
|
2018-02-08 01:29:06 +01:00
|
|
|
}:dir *;
|
2018-01-24 17:07:09 +01:00
|
|
|
neverallow perfetto { system_data_file -perfetto_traces_data_file }:dir ~{ getattr search };
|
|
|
|
neverallow perfetto zoneinfo_data_file:dir ~r_dir_perms;
|
|
|
|
neverallow perfetto { data_file_type -zoneinfo_data_file -perfetto_traces_data_file }:lnk_file *;
|
2019-06-14 00:05:15 +02:00
|
|
|
neverallow perfetto {
|
|
|
|
data_file_type
|
|
|
|
-zoneinfo_data_file
|
|
|
|
-perfetto_traces_data_file
|
2020-10-13 22:13:09 +02:00
|
|
|
-perfetto_configs_data_file
|
2019-06-14 00:05:15 +02:00
|
|
|
with_native_coverage(`-method_trace_data_file')
|
|
|
|
}:file ~write;
|