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')