Add selinux policy for Bluetooth HAL
Bug: 31972505
Test: VTS test passes, Bluetooth starts/stops
Change-Id: Ic068c9fca7c50e63c5b6e3d86a2ee6cc53207e08
diff --git a/private/file_contexts b/private/file_contexts
index 3fc8129..0b81d4c 100644
--- a/private/file_contexts
+++ b/private/file_contexts
@@ -235,6 +235,7 @@
/system/fake-lib(64)?/libart.* u:object_r:libart_file:s0
/system/lib(64)?/libart.* u:object_r:libart_file:s0
/system/bin/hw/android\.hardware\.audio@2\.0-service u:object_r:hal_audio_default_exec:s0
+/system/bin/hw/android\.hardware\.bluetooth@1\.0-service u:object_r:hal_bluetooth_default_exec:s0
/system/bin/hw/android\.hardware\.boot@1\.0-service u:object_r:hal_boot_exec:s0
/system/bin/hw/android\.hardware\.contexthub@1\.0-service u:object_r:hal_contexthub_default_exec:s0
/system/bin/hw/android\.hardware\.dumpstate@1\.0-service u:object_r:hal_dumpstate_default_exec:s0
diff --git a/private/hal_bluetooth_default.te b/private/hal_bluetooth_default.te
new file mode 100644
index 0000000..f77410c
--- /dev/null
+++ b/private/hal_bluetooth_default.te
@@ -0,0 +1,9 @@
+type hal_bluetooth_default, hal_bluetooth, domain;
+type hal_bluetooth_default_exec, exec_type, file_type;
+
+init_daemon_domain(hal_bluetooth_default)
+
+# VTS tests need to be able to toggle rfkill
+userdebug_or_eng(`
+ allow hal_bluetooth_default self:capability net_admin;
+')
diff --git a/public/attributes b/public/attributes
index 9bed18d..6c29042 100644
--- a/public/attributes
+++ b/public/attributes
@@ -116,6 +116,7 @@
# HALs
attribute hal_audio;
+attribute hal_bluetooth;
attribute hal_dumpstate;
attribute hal_gatekeeper;
attribute hal_graphics_allocator;
diff --git a/public/bluetooth.te b/public/bluetooth.te
index 9f21676..209a68b 100644
--- a/public/bluetooth.te
+++ b/public/bluetooth.te
@@ -60,6 +60,7 @@
# Perform HwBinder IPC.
hwbinder_use(bluetooth)
+binder_call(bluetooth, hal_bluetooth)
binder_call(bluetooth, hal_telephony)
###
diff --git a/public/hal_bluetooth.te b/public/hal_bluetooth.te
new file mode 100644
index 0000000..d061471
--- /dev/null
+++ b/public/hal_bluetooth.te
@@ -0,0 +1,25 @@
+# hwbinder access
+hwbinder_use(hal_bluetooth)
+
+r_dir_file(hal_bluetooth, system_file)
+
+# call into the Bluetooth process (callbacks)
+binder_call(hal_bluetooth, bluetooth)
+
+wakelock_use(hal_bluetooth);
+
+# bluetooth factory file accesses.
+r_dir_file(hal_bluetooth, bluetooth_efs_file)
+
+allow hal_bluetooth { uhid_device hci_attach_dev }:chr_file rw_file_perms;
+
+# Access to config files to look for a Bluetooth address
+r_dir_file(hal_bluetooth, bluetooth_data_file)
+
+# sysfs access.
+r_dir_file(hal_bluetooth, sysfs_type)
+allow hal_bluetooth sysfs_bluetooth_writable:file rw_file_perms;
+allow hal_bluetooth self:capability2 wake_alarm;
+
+# Allow write access to bluetooth-specific properties
+set_prop(hal_bluetooth, bluetooth_prop)
diff --git a/public/system_server.te b/public/system_server.te
index b77cf15..aa09679 100644
--- a/public/system_server.te
+++ b/public/system_server.te
@@ -159,6 +159,7 @@
# Perform HwBinder IPC.
hwbinder_use(system_server)
+binder_call(system_server, hal_bluetooth)
binder_call(system_server, hal_boot)
binder_call(system_server, hal_contexthub)
binder_call(system_server, hal_ir)