mediacodec->mediacodec+hal_omx{,_server,_client} am: 7baf725ea6
am: 6ad7e65447
am: d0c4d4e7db
Change-Id: Ide1410e139b1ebcf0d97705ad992e02b3ef95149
This commit is contained in:
commit
8cf94ca0a2
20 changed files with 99 additions and 106 deletions
|
@ -253,6 +253,7 @@ full_treble_only(`
|
|||
-hal_graphics_allocator_server
|
||||
-hal_cas_server
|
||||
-hal_neuralnetworks_server
|
||||
-hal_omx_server
|
||||
-binder_in_vendor_violators # TODO(b/35870313): Remove once all violations are gone
|
||||
-untrusted_app_visible_halserver
|
||||
}:binder { call transfer };
|
||||
|
|
|
@ -34,7 +34,6 @@ profman apk_data_file dir 77922323
|
|||
radio statsdw_socket sock_file 78456764
|
||||
statsd hal_health_default binder 77919007
|
||||
storaged storaged capability 77634061
|
||||
surfaceflinger mediacodec binder 77924251
|
||||
system_server crash_dump process 73128755
|
||||
system_server logd_socket sock_file 64734187
|
||||
system_server sdcardfs file 77856826
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
(type asan_reboot_prop)
|
||||
(type log_device)
|
||||
(type mediacasserver_service)
|
||||
(type mediacodec)
|
||||
(type mediacodec_exec)
|
||||
(type qtaguid_proc)
|
||||
(type reboot_data_file)
|
||||
(type tracing_shell_writable)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
;; types removed from current policy
|
||||
(type qtaguid_proc)
|
||||
(type mediacodec)
|
||||
(type mediacodec_exec)
|
||||
(type reboot_data_file)
|
||||
(type vold_socket)
|
||||
(type rild)
|
||||
|
|
|
@ -84,9 +84,9 @@ allow incidentd {
|
|||
hal_bluetooth_server
|
||||
hal_camera_server
|
||||
hal_graphics_composer_server
|
||||
hal_omx_server
|
||||
hal_sensors_server
|
||||
hal_vr_server
|
||||
mediacodec # TODO(b/36375899): hal_omx_server
|
||||
}:process signal;
|
||||
|
||||
# Allow incidentd to make binder calls to any binder service
|
||||
|
|
|
@ -4,8 +4,4 @@ init_daemon_domain(mediaserver)
|
|||
|
||||
# allocate and use graphic buffers
|
||||
hal_client_domain(mediaserver, hal_graphics_allocator)
|
||||
|
||||
# TODO(b/36375899): Remove this once OMX HAL is attributized and mediaserver is marked as a client
|
||||
# of OMX HAL.
|
||||
allow mediaserver hal_codec2_hwservice:hwservice_manager find;
|
||||
allow mediaserver hal_omx_hwservice:hwservice_manager find;
|
||||
hal_client_domain(mediaserver, hal_omx)
|
||||
|
|
|
@ -105,7 +105,7 @@ allow system_server appdomain:process { getsched setsched };
|
|||
allow system_server audioserver:process { getsched setsched };
|
||||
allow system_server hal_audio:process { getsched setsched };
|
||||
allow system_server hal_bluetooth:process { getsched setsched };
|
||||
allow system_server mediacodec:process { getsched setsched };
|
||||
allow system_server hal_omx_server:process { getsched setsched };
|
||||
allow system_server cameraserver:process { getsched setsched };
|
||||
allow system_server hal_camera:process { getsched setsched };
|
||||
allow system_server mediaserver:process { getsched setsched };
|
||||
|
@ -114,9 +114,9 @@ allow system_server bootanim:process { getsched setsched };
|
|||
# Allow system_server to write to /proc/<pid>/timerslack_ns
|
||||
allow system_server appdomain:file w_file_perms;
|
||||
allow system_server audioserver:file w_file_perms;
|
||||
allow system_server mediacodec:file w_file_perms;
|
||||
allow system_server cameraserver:file w_file_perms;
|
||||
allow system_server hal_audio_server:file w_file_perms;
|
||||
allow system_server hal_omx_server:file w_file_perms;
|
||||
|
||||
# Read /proc/pid data for all domains. This is used by ProcessCpuTracker
|
||||
# within system_server to keep track of memory and CPU usage for
|
||||
|
@ -201,9 +201,7 @@ hal_client_domain(system_server, hal_light)
|
|||
hal_client_domain(system_server, hal_memtrack)
|
||||
hal_client_domain(system_server, hal_neuralnetworks)
|
||||
hal_client_domain(system_server, hal_oemlock)
|
||||
allow system_server hal_codec2_hwservice:hwservice_manager find;
|
||||
allow system_server hal_omx_hwservice:hwservice_manager find;
|
||||
allow system_server hidl_token_hwservice:hwservice_manager find;
|
||||
hal_client_domain(system_server, hal_omx)
|
||||
hal_client_domain(system_server, hal_power)
|
||||
hal_client_domain(system_server, hal_sensors)
|
||||
hal_client_domain(system_server, hal_tetheroffload)
|
||||
|
@ -220,8 +218,6 @@ hal_client_domain(system_server, hal_wifi_hostapd)
|
|||
hal_client_domain(system_server, hal_wifi_offload)
|
||||
hal_client_domain(system_server, hal_wifi_supplicant)
|
||||
|
||||
binder_call(system_server, mediacodec)
|
||||
|
||||
# Talk with graphics composer fences
|
||||
allow system_server hal_graphics_composer:fd use;
|
||||
|
||||
|
@ -261,9 +257,9 @@ allow system_server {
|
|||
hal_bluetooth_server
|
||||
hal_camera_server
|
||||
hal_graphics_composer_server
|
||||
hal_omx_server
|
||||
hal_sensors_server
|
||||
hal_vr_server
|
||||
mediacodec # TODO(b/36375899): hal_omx_server
|
||||
}:process { signal };
|
||||
|
||||
# Use sockets received over binder from various services.
|
||||
|
|
|
@ -219,12 +219,14 @@ binder_call(appdomain, appdomain)
|
|||
# Perform binder IPC to ephemeral apps.
|
||||
binder_call(appdomain, ephemeral_app)
|
||||
|
||||
# TODO(b/36375899): Replace this with hal_client_domain once mediacodec is properly attributized
|
||||
# as OMX HAL
|
||||
# TODO(b/80317992): use hal_client_domain on individual domains or have tests
|
||||
# that the required individual permissions are all granted
|
||||
hwbinder_use({ appdomain -isolated_app })
|
||||
allow { appdomain -isolated_app } hal_codec2_hwservice:hwservice_manager find;
|
||||
allow { appdomain -isolated_app } hal_omx_hwservice:hwservice_manager find;
|
||||
allow { appdomain -isolated_app } hidl_token_hwservice:hwservice_manager find;
|
||||
get_prop({ appdomain -isolated_app }, hwservicemanager_prop);
|
||||
binder_call({ appdomain -isolated_app }, hal_omx_server)
|
||||
|
||||
# Talk with graphics composer fences
|
||||
allow appdomain hal_graphics_composer:fd use;
|
||||
|
@ -307,12 +309,6 @@ allowxperm { appdomain -bluetooth } self:{ rawip_socket tcp_socket udp_socket }
|
|||
|
||||
allow { appdomain -isolated_app } ion_device:chr_file r_file_perms;
|
||||
|
||||
# TODO(b/36375899) replace with hal_client_domain for mediacodec (hal_omx)
|
||||
get_prop({ appdomain -isolated_app }, hwservicemanager_prop);
|
||||
|
||||
# Allow app access to mediacodec (IOMX HAL)
|
||||
binder_call({ appdomain -isolated_app }, mediacodec)
|
||||
|
||||
# Allow AAudio apps to use shared memory file descriptors from the HAL
|
||||
allow { appdomain -isolated_app } hal_audio:fd use;
|
||||
|
||||
|
|
|
@ -283,6 +283,7 @@ hal_attribute(memtrack);
|
|||
hal_attribute(neuralnetworks);
|
||||
hal_attribute(nfc);
|
||||
hal_attribute(oemlock);
|
||||
hal_attribute(omx);
|
||||
hal_attribute(power);
|
||||
hal_attribute(secure_element);
|
||||
hal_attribute(sensors);
|
||||
|
|
|
@ -13,8 +13,8 @@ allow bufferhubd gpu_device:chr_file rw_file_perms;
|
|||
# Access /dev/ion
|
||||
allow bufferhubd ion_device:chr_file r_file_perms;
|
||||
|
||||
# Receive sync fence FDs from mediacodec. Note that mediacodec never directly
|
||||
# Receive sync fence FDs from hal_omx_server. Note that hal_omx_server never directly
|
||||
# connects to bufferhubd via PDX. Instead, a VR app acts as a bridge between
|
||||
# those two: it talks to mediacodec via Binder and talks to bufferhubd via PDX.
|
||||
# those two: it talks to hal_omx_server via Binder and talks to bufferhubd via PDX.
|
||||
# Thus, there is no need to use pdx_client macro.
|
||||
allow bufferhubd mediacodec:fd use;
|
||||
allow bufferhubd hal_omx_server:fd use;
|
||||
|
|
|
@ -1077,7 +1077,7 @@ neverallow {
|
|||
-system_server
|
||||
|
||||
# Processes that can't exec crash_dump
|
||||
-mediacodec
|
||||
-hal_omx_server
|
||||
-mediaextractor
|
||||
} tombstoned_crash_socket:unix_stream_socket connectto;
|
||||
|
||||
|
|
|
@ -75,9 +75,9 @@ allow dumpstate {
|
|||
hal_camera_server
|
||||
hal_drm_server
|
||||
hal_graphics_composer_server
|
||||
hal_omx_server
|
||||
hal_sensors_server
|
||||
hal_vr_server
|
||||
mediacodec # TODO(b/36375899): hal_omx_server
|
||||
}:process signal;
|
||||
|
||||
# Connect to tombstoned to intercept dumps.
|
||||
|
|
54
public/hal_omx.te
Normal file
54
public/hal_omx.te
Normal file
|
@ -0,0 +1,54 @@
|
|||
# applies all permissions to hal_omx NOT hal_omx_server
|
||||
# since OMX must always be in its own process.
|
||||
|
||||
add_hwservice(hal_omx_server, hal_codec2_hwservice)
|
||||
add_hwservice(hal_omx_server, hal_omx_hwservice)
|
||||
|
||||
# can route /dev/binder traffic to /dev/vndbinder
|
||||
vndbinder_use(hal_omx_server)
|
||||
|
||||
binder_call(hal_omx_server, binderservicedomain)
|
||||
binder_call(hal_omx_server, { appdomain -isolated_app })
|
||||
|
||||
# Allow hal_omx_server access to composer sync fences
|
||||
allow hal_omx_server hal_graphics_composer:fd use;
|
||||
|
||||
allow hal_omx_server gpu_device:chr_file rw_file_perms;
|
||||
allow hal_omx_server video_device:chr_file rw_file_perms;
|
||||
allow hal_omx_server video_device:dir search;
|
||||
allow hal_omx_server ion_device:chr_file rw_file_perms;
|
||||
allow hal_omx_server hal_camera:fd use;
|
||||
|
||||
crash_dump_fallback(hal_omx_server)
|
||||
|
||||
# Recieve gralloc buffer FDs from bufferhubd. Note that hal_omx_server never
|
||||
# directly connects to bufferhubd via PDX. Instead, a VR app acts as a bridge
|
||||
# between those two: it talks to hal_omx_server via Binder and talks to bufferhubd
|
||||
# via PDX. Thus, there is no need to use pdx_client macro.
|
||||
allow hal_omx_server bufferhubd:fd use;
|
||||
|
||||
allow hal_omx_client hal_codec2_hwservice:hwservice_manager find;
|
||||
allow hal_omx_client hal_omx_hwservice:hwservice_manager find;
|
||||
allow hal_omx_client hidl_token_hwservice:hwservice_manager find;
|
||||
|
||||
binder_call(hal_omx_client, hal_omx_server)
|
||||
|
||||
###
|
||||
### neverallow rules
|
||||
###
|
||||
|
||||
# hal_omx_server should never execute any executable without a
|
||||
# domain transition
|
||||
neverallow hal_omx_server { file_type fs_type }:file execute_no_trans;
|
||||
|
||||
# The goal of the mediaserver split is to place media processing code into
|
||||
# restrictive sandboxes with limited responsibilities and thus limited
|
||||
# permissions. Example: Audioserver is only responsible for controlling audio
|
||||
# hardware and processing audio content. Cameraserver does the same for camera
|
||||
# hardware/content. Etc.
|
||||
#
|
||||
# Media processing code is inherently risky and thus should have limited
|
||||
# permissions and be isolated from the rest of the system and network.
|
||||
# Lengthier explanation here:
|
||||
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
|
||||
neverallow hal_omx_server domain:{ tcp_socket udp_socket rawip_socket } *;
|
|
@ -1,70 +0,0 @@
|
|||
# mediacodec - audio and video codecs live here
|
||||
type mediacodec, domain;
|
||||
type mediacodec_exec, exec_type, vendor_file_type, file_type;
|
||||
|
||||
typeattribute mediacodec mlstrustedsubject;
|
||||
|
||||
# TODO(b/36375899) attributize this domain appropriately as hal_omx
|
||||
# and use macro hal_server_domain
|
||||
get_prop(mediacodec, hwservicemanager_prop)
|
||||
|
||||
# can route /dev/binder traffic to /dev/vndbinder
|
||||
vndbinder_use(mediacodec)
|
||||
|
||||
not_full_treble(`
|
||||
# on legacy devices, continue to allow /dev/binder traffic
|
||||
binder_use(mediacodec)
|
||||
binder_service(mediacodec)
|
||||
add_service(mediacodec, mediacodec_service)
|
||||
allow mediacodec mediametrics_service:service_manager find;
|
||||
allow mediacodec surfaceflinger_service:service_manager find;
|
||||
')
|
||||
binder_call(mediacodec, binderservicedomain)
|
||||
binder_call(mediacodec, appdomain)
|
||||
|
||||
# Allow mediacodec access to composer sync fences
|
||||
allow mediacodec hal_graphics_composer:fd use;
|
||||
|
||||
allow mediacodec gpu_device:chr_file rw_file_perms;
|
||||
allow mediacodec video_device:chr_file rw_file_perms;
|
||||
allow mediacodec video_device:dir search;
|
||||
allow mediacodec ion_device:chr_file rw_file_perms;
|
||||
allow mediacodec hal_camera:fd use;
|
||||
|
||||
crash_dump_fallback(mediacodec)
|
||||
|
||||
add_hwservice(mediacodec, hal_codec2_hwservice)
|
||||
add_hwservice(mediacodec, hal_omx_hwservice)
|
||||
|
||||
hal_client_domain(mediacodec, hal_allocator)
|
||||
|
||||
hal_client_domain(mediacodec, hal_cas)
|
||||
|
||||
# allocate and use graphic buffers
|
||||
hal_client_domain(mediacodec, hal_graphics_allocator)
|
||||
|
||||
# Recieve gralloc buffer FDs from bufferhubd. Note that mediacodec never
|
||||
# directly connects to bufferhubd via PDX. Instead, a VR app acts as a bridge
|
||||
# between those two: it talks to mediacodec via Binder and talks to bufferhubd
|
||||
# via PDX. Thus, there is no need to use pdx_client macro.
|
||||
allow mediacodec bufferhubd:fd use;
|
||||
|
||||
###
|
||||
### neverallow rules
|
||||
###
|
||||
|
||||
# mediacodec should never execute any executable without a
|
||||
# domain transition
|
||||
neverallow mediacodec { file_type fs_type }:file execute_no_trans;
|
||||
|
||||
# The goal of the mediaserver split is to place media processing code into
|
||||
# restrictive sandboxes with limited responsibilities and thus limited
|
||||
# permissions. Example: Audioserver is only responsible for controlling audio
|
||||
# hardware and processing audio content. Cameraserver does the same for camera
|
||||
# hardware/content. Etc.
|
||||
#
|
||||
# Media processing code is inherently risky and thus should have limited
|
||||
# permissions and be isolated from the rest of the system and network.
|
||||
# Lengthier explanation here:
|
||||
# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
|
||||
neverallow mediacodec domain:{ tcp_socket udp_socket rawip_socket } *;
|
|
@ -18,7 +18,9 @@ allow mediadrmserver processinfo_service:service_manager find;
|
|||
allow mediadrmserver surfaceflinger_service:service_manager find;
|
||||
allow mediadrmserver system_file:dir r_dir_perms;
|
||||
|
||||
binder_call(mediadrmserver, mediacodec)
|
||||
# TODO(b/80317992): remove
|
||||
binder_call(mediadrmserver, hal_omx_server)
|
||||
|
||||
###
|
||||
### neverallow rules
|
||||
###
|
||||
|
|
|
@ -4,9 +4,6 @@ type mediaserver_exec, exec_type, file_type;
|
|||
|
||||
typeattribute mediaserver mlstrustedsubject;
|
||||
|
||||
# TODO(b/36375899): replace with hal_client_domain macro on hal_omx
|
||||
typeattribute mediaserver halclientdomain;
|
||||
|
||||
net_domain(mediaserver)
|
||||
|
||||
r_dir_file(mediaserver, sdcard_type)
|
||||
|
@ -135,8 +132,6 @@ allow mediaserver system_server:fd use;
|
|||
|
||||
hal_client_domain(mediaserver, hal_allocator)
|
||||
|
||||
binder_call(mediaserver, mediacodec)
|
||||
|
||||
###
|
||||
### neverallow rules
|
||||
###
|
||||
|
|
1
vendor/bug_map
vendored
1
vendor/bug_map
vendored
|
@ -0,0 +1 @@
|
|||
surfaceflinger mediacodec binder 77924251
|
2
vendor/hal_drm_default.te
vendored
2
vendor/hal_drm_default.te
vendored
|
@ -4,7 +4,7 @@ hal_server_domain(hal_drm_default, hal_drm)
|
|||
type hal_drm_default_exec, exec_type, vendor_file_type, file_type;
|
||||
init_daemon_domain(hal_drm_default)
|
||||
|
||||
allow hal_drm_default mediacodec:fd use;
|
||||
allow hal_drm_default hal_omx_server:fd use;
|
||||
allow hal_drm_default { appdomain -isolated_app }:fd use;
|
||||
|
||||
allow hal_drm_default hal_allocator_server:fd use;
|
||||
|
|
1
vendor/hal_omx.te
vendored
1
vendor/hal_omx.te
vendored
|
@ -1 +0,0 @@
|
|||
init_daemon_domain(mediacodec)
|
19
vendor/mediacodec.te
vendored
Normal file
19
vendor/mediacodec.te
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
type mediacodec, domain, mlstrustedsubject;
|
||||
type mediacodec_exec, exec_type, vendor_file_type, file_type;
|
||||
|
||||
init_daemon_domain(mediacodec)
|
||||
|
||||
not_full_treble(`
|
||||
# on legacy devices, continue to allow /dev/binder traffic
|
||||
binder_use(mediacodec)
|
||||
binder_service(mediacodec)
|
||||
add_service(mediacodec, mediacodec_service)
|
||||
allow mediacodec mediametrics_service:service_manager find;
|
||||
allow mediacodec surfaceflinger_service:service_manager find;
|
||||
')
|
||||
|
||||
hal_server_domain(mediacodec, hal_omx)
|
||||
|
||||
hal_client_domain(mediacodec, hal_allocator)
|
||||
hal_client_domain(mediacodec, hal_cas)
|
||||
hal_client_domain(mediacodec, hal_graphics_allocator)
|
Loading…
Reference in a new issue