# Domain used for su processes, as well as for adbd and adb shell
# after performing an adb root command.

# All types must be defined regardless of build variant to ensure
# policy compilation succeeds with userdebug/user combination at boot
type su, domain;

# File types must be defined for file_contexts.
type su_exec, system_file_type, exec_type, file_type;

userdebug_or_eng(`
  typeattribute su mlstrustedsubject;

  # Add su to various domains
  net_domain(su)

  # grant su access to vndbinder
  vndbinder_use(su)

  dontaudit su self:capability_class_set *;
  dontaudit su self:capability2 *;
  dontaudit su kernel:security *;
  dontaudit su { kernel file_type }:system *;
  dontaudit su self:memprotect *;
  dontaudit su domain:anon_inode *;
  dontaudit su domain:{ process process2 } *;
  dontaudit su domain:fd *;
  dontaudit su domain:dir *;
  dontaudit su domain:lnk_file *;
  dontaudit su domain:{ fifo_file file } *;
  dontaudit su domain:socket_class_set *;
  dontaudit su domain:ipc_class_set *;
  dontaudit su domain:key *;
  dontaudit su fs_type:filesystem *;
  dontaudit su {fs_type dev_type file_type}:dir_file_class_set *;
  dontaudit su node_type:node *;
  dontaudit su node_type:{ tcp_socket udp_socket rawip_socket } *;
  dontaudit su netif_type:netif *;
  dontaudit su port_type:socket_class_set *;
  dontaudit su port_type:{ tcp_socket dccp_socket } *;
  dontaudit su domain:peer *;
  dontaudit su domain:binder *;
  dontaudit su property_type:property_service *;
  dontaudit su property_type:file *;
  dontaudit su service_manager_type:service_manager *;
  dontaudit su hwservice_manager_type:hwservice_manager *;
  dontaudit su vndservice_manager_type:service_manager *;
  dontaudit su servicemanager:service_manager list;
  dontaudit su hwservicemanager:hwservice_manager list;
  dontaudit su vndservicemanager:service_manager list;
  dontaudit su keystore:keystore_key *;
  dontaudit su keystore:keystore2 *;
  dontaudit su domain:drmservice *;
  dontaudit su unlabeled:filesystem *;
  dontaudit su postinstall_file:filesystem *;
  dontaudit su domain:bpf *;
  dontaudit su unlabeled:vsock_socket *;
  dontaudit su self:perf_event *;

  # VTS tests run in the permissive su domain on debug builds, but the HALs
  # being tested run in enforcing mode. Because hal_foo_server is enforcing
  # su needs to be declared as hal_foo_client to grant hal_foo_server
  # permission to interact with it.
  typeattribute su halclientdomain;
  typeattribute su hal_allocator_client;
  typeattribute su hal_atrace_client;
  typeattribute su hal_audio_client;
  typeattribute su hal_authsecret_client;
  typeattribute su hal_bluetooth_client;
  typeattribute su hal_bootctl_client;
  typeattribute su hal_camera_client;
  typeattribute su hal_configstore_client;
  typeattribute su hal_confirmationui_client;
  typeattribute su hal_contexthub_client;
  typeattribute su hal_drm_client;
  typeattribute su hal_cas_client;
  typeattribute su hal_dumpstate_client;
  typeattribute su hal_fingerprint_client;
  typeattribute su hal_gatekeeper_client;
  typeattribute su hal_gnss_client;
  typeattribute su hal_graphics_allocator_client;
  typeattribute su hal_graphics_composer_client;
  typeattribute su hal_health_client;
  typeattribute su hal_input_classifier_client;
  typeattribute su hal_ir_client;
  typeattribute su hal_keymaster_client;
  typeattribute su hal_light_client;
  typeattribute su hal_memtrack_client;
  typeattribute su hal_neuralnetworks_client;
  typeattribute su hal_nfc_client;
  typeattribute su hal_oemlock_client;
  typeattribute su hal_power_client;
  typeattribute su hal_rebootescrow_client;
  typeattribute su hal_secure_element_client;
  typeattribute su hal_sensors_client;
  typeattribute su hal_telephony_client;
  typeattribute su hal_tetheroffload_client;
  typeattribute su hal_thermal_client;
  typeattribute su hal_tv_cec_client;
  typeattribute su hal_tv_input_client;
  typeattribute su hal_tv_tuner_client;
  typeattribute su hal_usb_client;
  typeattribute su hal_vibrator_client;
  typeattribute su hal_vr_client;
  typeattribute su hal_weaver_client;
  typeattribute su hal_wifi_client;
  typeattribute su hal_wifi_hostapd_client;
  typeattribute su hal_wifi_supplicant_client;
')
