# SELinux policy for the perfetto binary running inside Microdroid.
# For the host Android policy check system/sepolicy/private/perfetto.te
# So far, this is file contains a subset of rules defined for the host Android.

type perfetto, domain, coredomain;
type perfetto_exec, system_file_type, exec_type, file_type;

# Allow to access traced's privileged consumer socket.
unix_socket_connect(perfetto, traced_consumer, traced)

# Connect to the Perfetto traced daemon as a producer. This requires
# connecting to its producer socket and obtaining a (per-process) tmpfs fd.
perfetto_producer(perfetto)

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

# Allow adbd to reap perfetto.
allow perfetto adbd:process { sigchld };

###
### Neverallow rules
###

# Disallow anyone else from being able to handle traces except selected system
# components.
neverallow {
  domain
  -init      # The creator of the folder.
  -perfetto  # The owner of the folder.
  -adbd      # For pulling traces.
  -shell     # For devepment purposes.
  -traced    # For write_into_file traces.
  -vendor_init # TODO(b/249050813): remove this
} perfetto_traces_data_file:dir *;

neverallow {
  domain
  -init      # The creator of the folder.
  -perfetto  # The owner of the folder.
  -adbd      # For pulling traces.
  -shell     # For devepment purposes.
  -traced    # For write_into_file traces.
  -vendor_init # TODO(b/249050813): remove this
} perfetto_traces_data_file:file ~{ getattr read };

### perfetto should NEVER do any of the following

# 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.
neverallow perfetto {
  data_file_type
  -perfetto_traces_data_file
  -perfetto_configs_data_file
  # We need following 3 lines because allow rules for them are defined at the
  # domain/coredomain level.
  -system_data_file
  -system_data_root_file
  -vendor_data_file
}:dir *;

neverallow perfetto { system_data_file -perfetto_traces_data_file }:dir ~{ getattr search };
neverallow perfetto {
  data_file_type
  -perfetto_traces_data_file
  -perfetto_configs_data_file
}:file ~write;
