From 3b4a36a5739f9cacdc91a4970e5ccc8860c30930 Mon Sep 17 00:00:00 2001 From: Ernie Hsu Date: Wed, 17 Jul 2024 10:04:25 +0000 Subject: [PATCH 1/3] Move mediacodec hal setting to gs-common Flag: EXEMPT refactor Bug: 353638738 Change-Id: Id17997c75e7dc4f44d7ba8a3a98fa241052cbbff --- mediacodec/vpu/mediacodec_google.mk | 21 ++++++++++++++++++++ mediacodec/vpu/sepolicy/file_contexts | 2 ++ mediacodec/vpu/sepolicy/mediacodec_google.te | 5 +++++ 3 files changed, 28 insertions(+) create mode 100644 mediacodec/vpu/mediacodec_google.mk create mode 100644 mediacodec/vpu/sepolicy/file_contexts create mode 100644 mediacodec/vpu/sepolicy/mediacodec_google.te diff --git a/mediacodec/vpu/mediacodec_google.mk b/mediacodec/vpu/mediacodec_google.mk new file mode 100644 index 0000000..8c1e974 --- /dev/null +++ b/mediacodec/vpu/mediacodec_google.mk @@ -0,0 +1,21 @@ +PRODUCT_SOONG_NAMESPACES += hardware/google/video/cnm + +PRODUCT_PACKAGES += \ + google.hardware.media.c2@3.0-service \ + libgc2_store \ + libgc2_base \ + libgc2_vdi_vpu \ + libgc2_log \ + libgc2_utils \ + libgc2_av1_dec \ + libgc2_vp9_dec \ + libgc2_hevc_dec \ + libgc2_avc_dec \ + libgc2_av1_enc \ + libgc2_hevc_enc \ + libgc2_avc_enc \ + vpu_firmware + +$(call soong_config_set,cnm,soc,$(TARGET_BOARD_PLATFORM)) + +BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/mediacodec/vpu/sepolicy diff --git a/mediacodec/vpu/sepolicy/file_contexts b/mediacodec/vpu/sepolicy/file_contexts new file mode 100644 index 0000000..138e20e --- /dev/null +++ b/mediacodec/vpu/sepolicy/file_contexts @@ -0,0 +1,2 @@ +/vendor/bin/hw/google\.hardware\.media\.c2@3\.0-service u:object_r:mediacodec_google_exec:s0 +/dev/vpu u:object_r:video_device:s0 diff --git a/mediacodec/vpu/sepolicy/mediacodec_google.te b/mediacodec/vpu/sepolicy/mediacodec_google.te new file mode 100644 index 0000000..21f7f44 --- /dev/null +++ b/mediacodec/vpu/sepolicy/mediacodec_google.te @@ -0,0 +1,5 @@ +type mediacodec_google, domain; +type mediacodec_google_exec, exec_type, vendor_file_type, file_type; + +init_daemon_domain(mediacodec_google) + From bbe999c37225553352032369a0425ab8d6249f52 Mon Sep 17 00:00:00 2001 From: Ernie Hsu Date: Thu, 18 Jul 2024 10:41:41 +0000 Subject: [PATCH 2/3] mediacodec: fix sepolicy for video playback/recording 07-18 08:46:26.420 925 925 I CodecLooper: type=1400 audit(0.0:404): avc: denied { use } for path="/dev/ashmemf7003569-92c8-48c6-bfdb-b7331af5f4e9" dev="tmpfs" ino=1121 scontext=u:r:mediacodec_google:s0 tcontext=u:r:mediaserver:s0 tclass=fd permissive=1 07-18 08:46:26.468 925 925 I HwBinder:925_3: type=1400 audit(0.0:405): avc: denied { use } for path="/dmabuf:system-uncached" dev="dmabuf" ino=734 scontext=u:r:mediacodec_google:s0 tcontext=u:r:hal_graphics_allocator_default:s0 tclass=fd permissive=1 07-18 08:46:26.664 925 925 I HwBinder:925_4: type=1400 audit(0.0:406): avc: denied { use } for path="anon_inode:sync_file" dev="anon_inodefs" ino=52 scontext=u:r:mediacodec_google:s0 tcontext=u:r:untrusted_app_27:s0:c83,c256,c512,c768 tclass=fd permissive=1 07-18 08:46:26.668 925 925 I HwBinder:925_5: type=1400 audit(0.0:407): avc: denied { use } for path="anon_inode:sync_file" dev="anon_inodefs" ino=52 scontext=u:r:mediacodec_google:s0 tcontext=u:r:surfaceflinger:s0 tclass=fd permissive=1 07-18 08:46:26.696 925 925 I HwBinder:925_5: type=1400 audit(0.0:408): avc: denied { use } for path="anon_inode:sync_file" dev="anon_inodefs" ino=52 scontext=u:r:mediacodec_google:s0 tcontext=u:r:hal_graphics_composer_default:s0 tclass=fd permissive=1 07-18 08:46:29.392 925 925 I HwBinder:925_6: type=1400 audit(0.0:409): avc: denied { use } for path="anon_inode:sync_file" dev="anon_inodefs" ino=52 scontext=u:r:mediacodec_google:s0 tcontext=u:r:hal_graphics_composer_default:s0 tclass=fd permissive=1 Test: video playback, screen recording Bug: 353638738 Change-Id: I071268d39cedf10b8f7c0ca0c9cb2bd33a367d09 --- mediacodec/vpu/sepolicy/mediacodec_google.te | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/mediacodec/vpu/sepolicy/mediacodec_google.te b/mediacodec/vpu/sepolicy/mediacodec_google.te index 21f7f44..2c5d1cb 100644 --- a/mediacodec/vpu/sepolicy/mediacodec_google.te +++ b/mediacodec/vpu/sepolicy/mediacodec_google.te @@ -3,3 +3,18 @@ type mediacodec_google_exec, exec_type, vendor_file_type, file_type; init_daemon_domain(mediacodec_google) +hal_server_domain(mediacodec_google, hal_codec2) + +hal_client_domain(mediacodec_google, hal_graphics_allocator) + +allow mediacodec_google dmabuf_system_heap_device:chr_file r_file_perms; + +# mediacodec_google should never execute any executable without a domain transition +neverallow mediacodec_google { file_type fs_type }:file execute_no_trans; + +# 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_google domain:{ udp_socket rawip_socket } *; +neverallow mediacodec_google { domain userdebug_or_eng(`-su') }:tcp_socket *; From 5c45a3e263a84819bdfcadc269eaf8435390b3bb Mon Sep 17 00:00:00 2001 From: feiyuchen Date: Fri, 19 Jul 2024 00:48:36 +0000 Subject: [PATCH 3/3] Allow Tachyon service to binder call a shell program Our Tachyon tests are running as shell program. We need this CL, so we can successfully run the tests without `adb root`. Bug: 353826183 Test: All tests in `run_tachyon_tests.py` passed after disabling the stress tests (cl/653778337) Change-Id: I7275029f5a837243c81968d5b53ffc3b00ddf9a5 Flag: EXEMPT bugfix --- edgetpu/sepolicy/edgetpu_tachyon_service.te | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/edgetpu/sepolicy/edgetpu_tachyon_service.te b/edgetpu/sepolicy/edgetpu_tachyon_service.te index da34353..8dbc51c 100644 --- a/edgetpu/sepolicy/edgetpu_tachyon_service.te +++ b/edgetpu/sepolicy/edgetpu_tachyon_service.te @@ -60,3 +60,8 @@ allow edgetpu_tachyon_server privapp_data_file:file { map read}; userdebug_or_eng(` allow edgetpu_tachyon_server shell_data_file:file { map read}; ') + +# For shell level testing +userdebug_or_eng(` + binder_call(edgetpu_tachyon_server, shell); +')