Esta página descreve o layout do diretório para dispositivos que executam o Android 8.0 e superior, as 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 de estrutura, incluindo LL-NDK, VNDK e bibliotecas somente de estrutura (incluindo LL-NDK-Private e algumas bibliotecas com os mesmos nomes que as do VNDK-SP). -
/system/lib[64]/vndk-sp
contém bibliotecas VNDK-SP para HALs do mesmo processo. -
/vendor/lib[64]
contém as bibliotecas VNDK estendidas pelo fornecedor (bibliotecas DXUA ou DXUX VNDK), implementações de HAL do mesmo processo e outras bibliotecas compartilhadas do fornecedor. -
/vendor/lib[64]/vndk-sp
pode conter as bibliotecas VNDK-SP estendidas pelo fornecedor.
Os módulos do fornecedor carregam as bibliotecas 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 não SP-HAL de partições de fornecedores (reforçadas com rigor a partir do Android 8.1).
- Os processos do fornecedor não devem carregar bibliotecas não-LL-NDK, não-VNDK-SP e não-VNDK da partição do sistema. (não é aplicado estritamente no Android O, mas será em uma versão futura).
- As bibliotecas VNDK instaladas precisam ser um subconjunto de bibliotecas VNDK qualificadas definidas pelo Google.
- As dependências externas de SP-HAL e SP-HAL-Dep devem ser restritas a bibliotecas LL-NDK ou VNDK-SP definidas pelo Google.
- As dependências de uma biblioteca compartilhada SP-HAL devem ser restritas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas pelo Google, outras bibliotecas SP-HAL e/ou outras bibliotecas compartilhadas de fornecedores que podem ser rotuladas como bibliotecas SP-HAL-Dep .
- Uma biblioteca compartilhada de fornecedor pode ser rotulada como uma biblioteca SP-HAL-Dep somente se não for uma biblioteca AOSP e suas dependências estiverem restritas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas pelo Google, bibliotecas SP-HAL e/ou outras bibliotecas SP-HAL-Dep.
- O VNDK-SP deve ser autônomo.
libRS_internal.so
recebe tratamento especial no Android 8.0, mas será revisitado em uma versão futura. - Nenhuma comunicação de fornecedor de framework por meio de interfaces não HIDL, incluindo (mas não limitado a) binder, soquetes, memórias compartilhadas, arquivos, etc.
- O tamanho da partição do sistema deve ser grande o suficiente para conter duas cópias de todas as bibliotecas VNDK elegíveis e uma cópia das bibliotecas compartilhadas de estrutura inelegíveis.
sepolicy
Os processos de estrutura descritos nesta seção correspondem a coredomain
em sepolicies, enquanto os processos de fornecedor correspondem a non-coredomain
. Por exemplo, /dev/binder
pode ser acessado apenas em coredomain
e /dev/vndbinder
pode ser acessado apenas em non- coredomain
.
Políticas semelhantes restringem o acesso às bibliotecas compartilhadas nas 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 de coredomain | Acessível de não é núcleo do domínio |
---|---|---|---|
LL-NDK | Sistema | S | S |
LL-NDK-Privado | Sistema | S | S |
VNDK-SP/VNDK-SP-Privado | Sistema | S | S |
VNDK-SP-Ext | Fornecedor | S | S |
VNDK | Sistema | S | S |
VNDK-Ext | Fornecedor | N | S |
SOMENTE FWK | Sistema | S | N |
FWK-SOMENTE-RS | Sistema | S | N |
SP-HAL | Fornecedor | S | S |
SP-HAL-Dep | Fornecedor | S | S |
SOMENTE VND | Fornecedor | N | S |
LL-NDK-Private e VNDK-SP-Private devem ser acessíveis de ambos os domínios porque não- coredomain
irão acessá-los indiretamente. Da mesma forma, o SP-HAL-Dep deve ser acessível a partir do coredomain
porque o SP-HAL depende dele.
rótulo same_process_hal_file
As bibliotecas a seguir existem na partição do fornecedor. Torne essas bibliotecas acessíveis de 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
Rotule explicitamente esses arquivos como same_process_hal_file
, porque qualquer coisa na partição do vendor
é, por padrão, não acessível ao coredomain
. Adicione linhas semelhantes às seguintes 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