Diretórios, regras e política do SELinux

Esta página descreve o layout do diretório para dispositivos com o Android 8.0 e versões mais recentes, regras do VNDK e a política de segurança associada.

Layout do diretório

O layout de diretório degenerado consiste nos seguintes diretórios:

  • /system/lib[64] contém todas as bibliotecas compartilhadas do framework, incluindo LL-NDK, VNDK e bibliotecas exclusivas do framework (incluindo LL-NDK-Private e algumas bibliotecas com os mesmos nomes que as do VNDK-SP).
  • /system/lib[64]/vndk-sp contém bibliotecas do VNDK-SP para HALs do mesmo processo.
  • /vendor/lib[64] contém as bibliotecas do VNDK estendidas pelo fornecedor (bibliotecas DXUA ou DXUX do VNDK), implementações HAL do mesmo processo e outras bibliotecas compartilhadas do fornecedor.
  • /vendor/lib[64]/vndk-sp pode conter as bibliotecas do VNDK-SP estendidas pelo fornecedor.

Os módulos do fornecedor carregam as bibliotecas do VNDK de /system/lib[64].

Regras do VNDK

Esta seção fornece uma lista abrangente de regras do VNDK:

  • Os processos do framework não podem carregar bibliotecas compartilhadas que não são do SP-HAL de partições do fornecedor (estritamente aplicado a partir do Android 8.1).
  • Os processos do fornecedor não podem carregar bibliotecas que não sejam LL-NDK, VNDK-SP e não-VNDK da partição do sistema. Não é estritamente aplicado no Android O, mas será em uma versão futura.
  • As bibliotecas do VNDK instaladas precisam ser um subconjunto de bibliotecas do VNDK qualificadas definidas pelo Google.
  • As dependências externas de SP-HAL e SP-HAL-Dep precisam ser restritas a LL-NDK ou bibliotecas VNDK-SP definidas pelo Google.
    • As dependências de uma biblioteca compartilhada SP-HAL precisam ser restritas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas pelo Google, outras bibliotecas SP-HAL e/ou outras bibliotecas compartilhadas do fornecedor que podem ser marcadas como bibliotecas SP-HAL-Dep.
    • Uma biblioteca compartilhada do fornecedor só pode ser marcada como uma biblioteca SP-HAL-Dep se ela não for uma biblioteca do AOSP e as dependências dela forem restritas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas pelo Google, bibliotecas SP-HAL e/ou outras bibliotecas SP-HAL-Dep.
  • O VNDK-SP precisa ser independente. O libRS_internal.so recebe um tratamento especial no Android 8.0, mas será revisto em uma versão futura.
  • Nenhuma comunicação de framework-vendor por interfaces não-HIDL, incluindo (mas não se limitando a) binder, soquetes, memórias compartilhadas, arquivos etc.
  • O tamanho da partição do sistema precisa ser grande o suficiente para conter duas cópias de todas as bibliotecas qualificadas do VNDK e uma cópia das bibliotecas compartilhadas de framework não qualificadas.

sepolicy

Os processos do framework descritos nesta seção correspondem a coredomain em sepolicies, enquanto os processos do fornecedor correspondem a non-coredomain. Por exemplo, /dev/binder pode ser acessado apenas em coredomain, e /dev/vndbinder pode ser acessado apenas em não coredomain.

Políticas semelhantes restringem o acesso às bibliotecas compartilhadas em partições do sistema e do fornecedor. A tabela a seguir mostra os direitos de acesso a bibliotecas compartilhadas de diferentes categorias:

Categoria Partição Acessível em
coredomain
Acessível de
domínio não principal
LL-NDK Sistema Y Y
LL-NDK-Private Sistema Y Y
VNDK-SP/VNDK-SP-Private Sistema Y Y
VNDK-SP-Ext Fornecedor Y Y
VNDK Sistema Y Y
VNDK-Ext Fornecedor N Y
FWK-ONLY Sistema Y N
FWK-ONLY-RS Sistema Y N
SP-HAL Fornecedor Y Y
SP-HAL-Dep Fornecedor Y Y
VND-ONLY Fornecedor N Y

LL-NDK-Private e VNDK-SP-Private precisam ser acessíveis em ambos os domínios, porque o coredomain não acessados indiretamente. Da mesma forma, o SP-HAL-Dep precisa ser acessível em coredomain porque o SP-HAL depende dele.

rótulo same_process_hal_file

As bibliotecas a seguir existem na partição do fornecedor. Faça com que essas bibliotecas sejam acessíveis em coredomain e não coredomain.

  • VNDK-SP-Ext em /vendor/lib[64]/vndk-sp
  • SP-HAL em /vendor/lib[64] ou /vendor/lib[64]/hw
  • SP-HAL-Dep em /vendor/lib[64] ou /vendor/lib[64]/hw

Identifique explicitamente esses arquivos como same_process_hal_file, porque tudo na partição vendor não é acessível para coredomain por padrão. Adicione linhas semelhantes a esta ao arquivo file_contexts específico do fornecedor.

/vendor/lib(64)?/hw/libMySpHal\.so        u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/vndk-sp/libBase\.so      u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/libBaseInternal\.so      u:object_r:same_process_hal_file:s0