# Bluetooth executables and scripts
type bluetooth_loader, domain;
type bluetooth_loader_exec, exec_type, file_type;

# Start bdAddrLoader from init
init_daemon_domain(bluetooth_loader)

# Run init.qcom.bt.sh
allow bluetooth_loader shell_exec:file { entrypoint getattr read };
allow bluetooth_loader bluetooth_loader_exec:file { getattr open execute_no_trans };

# init.qcom.bt.sh needs /system/bin/log access
allow bluetooth_loader devpts:chr_file rw_file_perms;

# Run hci_qcomm_init from init.qcom.bt.sh
domain_auto_trans(bluetooth_loader, hci_attach_exec, hci_attach)
allow hci_attach bluetooth_loader:fd use;

# Set persist.service.bdroid.* and bluetooth.* property values
set_prop(bluetooth_loader, bluetooth_prop)

# Allow getprop/setprop for init.qcom.bt.sh
allow bluetooth_loader system_file:file execute_no_trans;
allow bluetooth_loader toolbox_exec:file rx_file_perms;

# Allow hci_qcomm_init /persist/.bt_nv.bin access
r_dir_file(bluetooth_loader, persist_file);
allow bluetooth_loader bluetooth_data_file:file r_file_perms;

# Access the smd device
allow bluetooth_loader hci_attach_dev:chr_file rw_file_perms;

# And qmuxd
allow bluetooth_loader qmuxd_socket:dir { write add_name remove_name search };
allow bluetooth_loader qmuxd_socket:sock_file { create setattr getattr write unlink };
allow bluetooth_loader qmuxd:unix_stream_socket { connectto };

userdebug_or_eng(`
  diag_use(bluetooth_loader)
')
