149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# audioserver - audio services daemon
249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaletypeattribute audioserver coredomain;
449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaletype audioserver_exec, exec_type, file_type;
649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleinit_daemon_domain(audioserver)
749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaler_dir_file(audioserver, sdcard_type)
949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
1049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalebinder_use(audioserver)
1149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalebinder_call(audioserver, binderservicedomain)
1249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalebinder_call(audioserver, appdomain)
1349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalebinder_service(audioserver)
1449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
1549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalehal_client_domain(audioserver, hal_allocator)
1649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# /system/lib64/hw for always-passthrough Allocator HAL ashmem / mapper .so
1749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaler_dir_file(audioserver, system_file)
1849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
1949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalehal_client_domain(audioserver, hal_audio)
2049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
2149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleuserdebug_or_eng(`
2249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  # used for TEE sink - pcm capture for debug.
2349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver media_data_file:dir create_dir_perms;
2449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver audioserver_data_file:dir create_dir_perms;
2549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver audioserver_data_file:file create_file_perms;
2649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
2749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  # ptrace to processes in the same domain for memory leak detection
2849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver self:process ptrace;
2949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale')
3049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
3149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleadd_service(audioserver, audioserver_service)
3249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver activity_service:service_manager find;
3349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver appops_service:service_manager find;
3449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver batterystats_service:service_manager find;
3549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver permission_service:service_manager find;
3649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver power_service:service_manager find;
3749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver scheduling_policy_service:service_manager find;
382306cc040a5291c04e6dfce250f6ead2c9d0ef08Ray Essickallow audioserver mediametrics_service:service_manager find;
3949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
4049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Allow read/write access to bluetooth-specific properties
4149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleset_prop(audioserver, bluetooth_a2dp_offload_prop)
4249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleset_prop(audioserver, bluetooth_prop)
4349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleset_prop(audioserver, exported_bluetooth_prop)
4449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
4549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Grant access to audio files to audioserver
4649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver audio_data_file:dir ra_dir_perms;
4749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver audio_data_file:file create_file_perms;
4849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
4949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# allow access to ALSA MMAP FDs for AAudio API
5049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver audio_device:chr_file { read write };
5149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
5249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalenot_full_treble(`allow audioserver audio_device:dir r_dir_perms;')
5349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwalenot_full_treble(`allow audioserver audio_device:chr_file rw_file_perms;')
5449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
5549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# For A2DP bridge which is loaded directly into audioserver
5649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleunix_socket_connect(audioserver, bluetooth, bluetooth)
5749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
5849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Allow shell commands from ADB and shell for CTS testing/dumping
5949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver adbd:fd use;
6049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver adbd:unix_stream_socket { read write };
6149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleallow audioserver shell:fifo_file { read write };
6249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
6349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Allow shell commands from ADB for CTS testing/dumping
6449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleuserdebug_or_eng(`
6549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver su:fd use;
6649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver su:fifo_file { read write };
6749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale  allow audioserver su:unix_stream_socket { read write };
6849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale')
6949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
7049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale###
7149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale### neverallow rules
7249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale###
7349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
7449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# audioserver should never execute any executable without a
7549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# domain transition
7649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleneverallow audioserver { file_type fs_type }:file execute_no_trans;
7749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale
7849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# The goal of the mediaserver split is to place media processing code into
7949b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# restrictive sandboxes with limited responsibilities and thus limited
8049b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# permissions. Example: Audioserver is only responsible for controlling audio
8149b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# hardware and processing audio content. Cameraserver does the same for camera
8249b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# hardware/content. Etc.
8349b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale#
8449b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Media processing code is inherently risky and thus should have limited
8549b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# permissions and be isolated from the rest of the system and network.
8649b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# Lengthier explanation here:
8749b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwale# https://android-developers.googleblog.com/2016/05/hardening-media-stack.html
8849b79029cbb4bfb362b6b823e63bb467e8012230Wale Ogunwaleneverallow audioserver domain:{ tcp_socket udp_socket rawip_socket } *;
89