type stats, domain;
typeattribute stats coredomain;
type stats_exec, system_file_type, exec_type, file_type;

# switch to stats domain for stats command
domain_auto_trans(shell, stats_exec, stats)

# allow stats access to stdout from its parent shell.
allow stats shell:fd use;

# allow stats to communicate use, read and write over the adb
# connection.
allow stats adbd:fd use;
allow stats adbd:unix_stream_socket { read write };

# allow adbd to reap stats
allow stats adbd:process { sigchld };

# Allow the stats command to talk to the statsd over the binder, and get
# back the stats report data from a ParcelFileDescriptor.
binder_use(stats)
allow stats stats_service:service_manager find;
binder_call(stats, statsd)
allow stats statsd:fifo_file write;

# Only statsd can publish the binder service.
add_service(statsd, stats_service)

# Allow pipes from (and only from) stats.
allow statsd stats:fd use;
allow statsd stats:fifo_file write;

# Allow statsd to call back to stats with status updates.
binder_call(statsd, stats)

###
### neverallow rules
###

neverallow {
  domain
  -dumpstate
  -incidentd
  -platform_app
  -priv_app
  -shell
  -stats
  -statsd
  -system_app
  -system_server
  -traceur_app
} stats_service:service_manager find;