diff --git a/private/hwservice_contexts b/private/hwservice_contexts
index 4351ea1d866464cb9be5e9a761748a6ef6f6f126..9330041a708b0979c1e03be551923e37368e8abe 100644
--- a/private/hwservice_contexts
+++ b/private/hwservice_contexts
@@ -1 +1,2 @@
+android.hardware.camera.provider::ICameraProvider             u:object_r:hw_camera_provider_ICameraProvider:s0
 *                                    u:object_r:default_android_hwservice:s0
diff --git a/public/cameraserver.te b/public/cameraserver.te
index d1b55cff0f3ea637218568112ff63bee74f88a4c..46083f5cc8e554ceeac6c25396f50eec0f4c3e68 100644
--- a/public/cameraserver.te
+++ b/public/cameraserver.te
@@ -8,6 +8,8 @@ binder_call(cameraserver, appdomain)
 binder_service(cameraserver)
 
 hal_client_domain(cameraserver, hal_camera)
+allow cameraserver hw_camera_provider_ICameraProvider:hwservice_manager find;
+
 hal_client_domain(cameraserver, hal_graphics_allocator)
 
 allow cameraserver ion_device:chr_file rw_file_perms;
diff --git a/public/hal_camera.te b/public/hal_camera.te
index b05239b78714346c8483cde56d04ed1495eca864..a00bf9f4244beb35ed214494d4a39aa6ffa28c4c 100644
--- a/public/hal_camera.te
+++ b/public/hal_camera.te
@@ -2,6 +2,8 @@
 binder_call(hal_camera_client, hal_camera_server)
 binder_call(hal_camera_server, hal_camera_client)
 
+add_hwservice(hal_camera_server, hw_camera_provider_ICameraProvider)
+
 # access /data/misc/camera
 allow hal_camera camera_data_file:dir create_dir_perms;
 allow hal_camera camera_data_file:file create_file_perms;
diff --git a/public/hwservice.te b/public/hwservice.te
index a39ffd2a357178a57a52eaed1fe4969dc93f14de..cf596294297d60c52825ce5bd990158689a0f8b9 100644
--- a/public/hwservice.te
+++ b/public/hwservice.te
@@ -1 +1,2 @@
 type default_android_hwservice,   hwservice_manager_type;
+type hw_camera_provider_ICameraProvider,             hwservice_manager_type;
diff --git a/public/te_macros b/public/te_macros
index 3ac0e5dc53d07b83302a04680317e62604fe4acd..beec54640aaaef079c848cd8e996ccd8e8a2e579 100644
--- a/public/te_macros
+++ b/public/te_macros
@@ -502,6 +502,16 @@ define(`add_service', `
   neverallow { domain -$1 } $2:service_manager add;
 ')
 
+###########################################
+# add_hwservice(domain, service)
+# Ability for domain to add a service to hwservice_manager
+# and find it. It also creates a neverallow preventing
+# others from adding it.
+define(`add_hwservice', `
+  allow $1 $2:hwservice_manager { add find };
+  neverallow { domain -$1 } $2:hwservice_manager add;
+')
+
 ##########################################
 # print a message with a trailing newline
 # print(`args')