Skip to content
Snippets Groups Projects
  • Alex Klyubin's avatar
    Grant audioserver access to /system/lib64/hw · 2d704464
    Alex Klyubin authored
    audioserver uses an always-passthrough Allocator HAL (ashmem / mapper)
    whose .so is loaded from /system/lib64/hw.
    
    Test: Modify hal_client_domain macro to not associate client of X HAL
          with hal_x attribute. Play Google Play Movies move -- no denials
          and AV playback works.
    Bug: 37160141
    
    Change-Id: I7b88b222aba5361a6c7f0f6bb89705503255a4b1
    2d704464
audioserver.te 2.18 KiB
# audioserver - audio services daemon

typeattribute audioserver coredomain;

type audioserver_exec, exec_type, file_type;
init_daemon_domain(audioserver)

r_dir_file(audioserver, sdcard_type)

binder_use(audioserver)
binder_call(audioserver, binderservicedomain)
binder_call(audioserver, appdomain)
binder_service(audioserver)

hal_client_domain(audioserver, hal_allocator)
# /system/lib64/hw for always-passthrough Allocator HAL ashmem / mapper .so
r_dir_file(audioserver, system_file)

hal_client_domain(audioserver, hal_audio)

userdebug_or_eng(`
  # used for TEE sink - pcm capture for debug.
  allow audioserver media_data_file:dir create_dir_perms;
  allow audioserver audioserver_data_file:dir create_dir_perms;
  allow audioserver audioserver_data_file:file create_file_perms;

  # ptrace to processes in the same domain for memory leak detection
  allow audioserver self:process ptrace;
')

add_service(audioserver, audioserver_service)
allow audioserver appops_service:service_manager find;
allow audioserver batterystats_service:service_manager find;
allow audioserver permission_service:service_manager find;
allow audioserver power_service:service_manager find;
allow audioserver scheduling_policy_service:service_manager find;

# Grant access to audio files to audioserver
allow audioserver audio_data_file:dir ra_dir_perms;
allow audioserver audio_data_file:file create_file_perms;

###
### neverallow rules
###

# audioserver should never execute any executable without a
# domain transition
neverallow audioserver { 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 audioserver domain:{ tcp_socket udp_socket rawip_socket } *;