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