Skip to content
Snippets Groups Projects
  • Alex Klyubin's avatar
    Wifi Keystore HAL is not a HAL · 9a14704f
    Alex Klyubin authored
    Wifi Keystore HAL is a HwBinder service (currently offered by keystore
    daemon) which is used by Wifi Supplicant HAL. This commit thus
    switches the SELinux policy of Wifi Keystore HAL to the approach used
    for non-HAL HwBinder services.
    
    The basic idea is simimilar to how we express Binder services in the
    policy, with two tweaks: (1) we don't have 'hwservicemanager find' and
    thus there's no add_hwservice macro, and (2) we need loosen the
    coupling between core and vendor components. For example, it should be
    possible to move a HwBinder service offered by a core component into
    another core component, without having to update the SELinux policy of
    the vendor image. We thus annotate all components offering HwBinder
    service x across the core-vendor boundary with x_server, which enables
    the policy of clients to contain rules of the form:
    binder_call(mydomain, x_server), and, if the service uses IPC
    callbacks, also binder_call(x_server, mydomain).
    
    Test: mmm system/sepolicy
    Test: sesearch indicates to changes to binder { call transfer} between
          keystore and hal_wifi_supplicant_default domains
    Bug: 36896667
    
    Change-Id: I45c4ce8159b63869d7bb6df5c812c5291776d892
    9a14704f
keystore.te 1.23 KiB
type keystore, domain, domain_deprecated;
type keystore_exec, exec_type, file_type;

# keystore daemon
typeattribute keystore mlstrustedsubject;
binder_use(keystore)
binder_service(keystore)
binder_call(keystore, system_server)

# talk to keymaster
hal_client_domain(keystore, hal_keymaster)

# Offer the Wifi Keystore HwBinder service
hwbinder_use(keystore)
typeattribute keystore wifi_keystore_service_server;

allow keystore keystore_data_file:dir create_dir_perms;
allow keystore keystore_data_file:notdevfile_class_set create_file_perms;
allow keystore keystore_exec:file { getattr };

add_service(keystore, keystore_service)
allow keystore sec_key_att_app_id_provider_service:service_manager find;

# Check SELinux permissions.
selinux_check_access(keystore)

r_dir_file(keystore, cgroup)

###
### Neverallow rules
###
### Protect ourself from others
###

neverallow { domain -keystore } keystore_data_file:dir ~{ open create read getattr setattr search relabelto ioctl };
neverallow { domain -keystore } keystore_data_file:notdevfile_class_set ~{ relabelto getattr };

neverallow { domain -keystore -init } keystore_data_file:dir *;
neverallow { domain -keystore -init } keystore_data_file:notdevfile_class_set *;

neverallow * keystore:process ptrace;