From 5090d6f3241ffbd96f5a0b24df602bd2559f3cf4 Mon Sep 17 00:00:00 2001
From: Janis Danisevskis <jdanis@google.com>
Date: Fri, 4 Nov 2016 15:51:08 +0000
Subject: [PATCH] Preliminary policy for hal_keymaster (TREBLE)

This adds the premissions required for
android.hardware.keymaster@2.0-service to access the keymaster TA
as well as for keystore and vold to lookup and use
android.hardware.keymaster@2.0-service.

IT DOES NOT remove the privileges from keystore and vold to access
the keymaster TA directly.

Test: Run keystore CTS tests
Bug: 32020919
Change-Id: I9467ee29232cc54b48a6dae8ae240656999f73bf
---
 private/file_contexts    | 1 +
 private/hal_keymaster.te | 5 +++++
 public/attributes        | 1 +
 public/hal_keymaster.te  | 7 +++++++
 public/keystore.te       | 5 +++++
 public/vold.te           | 2 ++
 6 files changed, 21 insertions(+)
 create mode 100644 private/hal_keymaster.te
 create mode 100644 public/hal_keymaster.te

diff --git a/private/file_contexts b/private/file_contexts
index 98a3c2395..e8807abee 100644
--- a/private/file_contexts
+++ b/private/file_contexts
@@ -248,6 +248,7 @@
 /system/bin/hw/android\.hardware\.graphics\.composer@2\.1-service    u:object_r:hal_graphics_composer_default_exec:s0
 /system/bin/hw/android\.hardware\.health@1\.0-service         u:object_r:hal_health_default_exec:s0
 /system/bin/hw/android\.hardware\.ir@1\.0-service             u:object_r:hal_ir_default_exec:s0
+/system/bin/hw/android\.hardware\.keymaster@3\.0-service      u:object_r:hal_keymaster_default_exec:s0
 /system/bin/hw/android\.hardware\.light@2\.0-service          u:object_r:hal_light_default_exec:s0
 /system/bin/hw/android\.hardware\.memtrack@1\.0-service       u:object_r:hal_memtrack_default_exec:s0
 /system/bin/hw/android\.hardware\.nfc@1\.0-service            u:object_r:hal_nfc_default_exec:s0
diff --git a/private/hal_keymaster.te b/private/hal_keymaster.te
new file mode 100644
index 000000000..4c6d0d292
--- /dev/null
+++ b/private/hal_keymaster.te
@@ -0,0 +1,5 @@
+type hal_keymaster_default, domain;
+hal_impl_domain(hal_keymaster_default, hal_keymaster)
+
+type hal_keymaster_default_exec, exec_type, file_type;
+init_daemon_domain(hal_keymaster_default)
diff --git a/public/attributes b/public/attributes
index 66cc59403..25d891431 100644
--- a/public/attributes
+++ b/public/attributes
@@ -128,6 +128,7 @@ attribute hal_graphics_allocator;
 attribute hal_graphics_composer;
 attribute hal_health;
 attribute hal_ir;
+attribute hal_keymaster;
 attribute hal_light;
 attribute hal_memtrack;
 attribute hal_nfc;
diff --git a/public/hal_keymaster.te b/public/hal_keymaster.te
new file mode 100644
index 000000000..a3aef59ae
--- /dev/null
+++ b/public/hal_keymaster.te
@@ -0,0 +1,7 @@
+# hwbinder access
+hwbinder_use(hal_keymaster)
+
+allow hal_keymaster tee_device:chr_file rw_file_perms;
+allow hal_keymaster tee:unix_stream_socket connectto;
+
+allow hal_keymaster ion_device:chr_file r_file_perms;
diff --git a/public/keystore.te b/public/keystore.te
index 42150176a..33238f306 100644
--- a/public/keystore.te
+++ b/public/keystore.te
@@ -6,6 +6,11 @@ typeattribute keystore mlstrustedsubject;
 binder_use(keystore)
 binder_service(keystore)
 binder_call(keystore, system_server)
+
+# talk to keymaster
+binder_call(keystore, hwservicemanager)
+binder_call(keystore, hal_keymaster)
+
 allow keystore keystore_data_file:dir create_dir_perms;
 allow keystore keystore_data_file:notdevfile_class_set create_file_perms;
 allow keystore keystore_exec:file { getattr };
diff --git a/public/vold.te b/public/vold.te
index 6baba08da..e80bd8bc2 100644
--- a/public/vold.te
+++ b/public/vold.te
@@ -130,6 +130,8 @@ binder_use(vold)
 binder_call(vold, healthd)
 
 # talk to keymaster
+binder_call(vold, hwservicemanager)
+binder_call(vold, hal_keymaster)
 allow vold tee_device:chr_file rw_file_perms;
 
 # Access userdata block device.
-- 
GitLab