# Copyright (c) 2020 The Linux Foundation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#     * Redistributions of source code must retain the above copyright
#       notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
#       copyright notice, this list of conditions and the following
#       disclaimer in the documentation and/or other materials provided
#       with the distribution.
#     * Neither the name of The Linux Foundation nor the names of its
#       contributors may be used to endorse or promote products derived
#       from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

typeattribute vendor_sys_sxrd coredomain;
typeattribute vendor_sys_sxrd mlstrustedsubject;
type vendor_sys_sxrd_exec, system_file_type, exec_type, file_type;

init_daemon_domain(vendor_sys_sxrd)

# Allow access to our socket
allow vendor_sys_sxrd vendor_sys_sxrd_socket:sock_file rw_file_perms;

# Allow interracting with vendor_sxrd directory
allow vendor_sys_sxrd vendor_sys_sxrd_data_file:dir create_dir_perms;
allow vendor_sys_sxrd vendor_sys_sxrd_data_file:file create_file_perms;

#video device
allow vendor_sys_sxrd video_device:chr_file rw_file_perms;

#Allow hal graphics allocator permissions
hal_client_domain(vendor_sys_sxrd, hal_graphics_allocator);

#access to usb device
allow vendor_sys_sxrd usb_device:chr_file rw_file_perms;
allow vendor_sys_sxrd usb_device:dir search;
allow vendor_sys_sxrd device:dir search;

#Allow access to PCM sound card
allow vendor_sys_sxrd audio_device:chr_file rw_file_perms;
allow vendor_sys_sxrd audio_device:dir r_dir_perms;

#Allow access to Audio Flinger APIs
binder_call(vendor_sys_sxrd, audioserver);
allow vendor_sys_sxrd audioserver_service : service_manager find;

# Add rule to access /proc/asound/pcm file
r_dir_file(vendor_sys_sxrd, proc_asound);
