En esta página, se describe el diseño de directorios para dispositivos con Android 8.0 y versiones posteriores, las reglas de VNDK y la política de SE asociada.
Diseño del directorio
El diseño de directorio degenerado consta de los siguientes directorios:
/system/lib[64]
contiene todas las bibliotecas compartidas del framework, incluidas las bibliotecas de LL-NDK, VNDK y solo de framework (incluidas LL-NDK-Private y algunas bibliotecas con los mismos nombres que las de VNDK-SP)./system/lib[64]/vndk-sp
contiene bibliotecas de VNDK-SP para HALs del mismo proceso./vendor/lib[64]
contiene las bibliotecas de VNDK que extiende el proveedor (bibliotecas de VNDK DXUA o DXUX), implementaciones de HAL del mismo proceso y otras bibliotecas compartidas del proveedor./vendor/lib[64]/vndk-sp
puede contener las bibliotecas de VNDK-SP que extendió el proveedor.
Los módulos del proveedor cargan las bibliotecas de VNDK desde /system/lib[64]
.
Reglas de VNDK
En esta sección, se proporciona una lista completa de las reglas de VNDK:
- Los procesos del framework no deben cargar bibliotecas compartidas que no sean de SP-HAL desde particiones del proveedor (se aplica estrictamente a partir de Android 8.1).
- Los procesos del proveedor no deben cargar bibliotecas que no sean de LL-NDK, VNDK-SP ni VNDK desde la partición del sistema. (no se aplica estrictamente en Android O, pero sí en una versión futura).
- Las bibliotecas de VNDK instaladas deben ser un subconjunto de las bibliotecas de VNDK aptas definidas por Google.
- Las dependencias externas de SP-HAL y SP-HAL-Dep deben restringirse a las bibliotecas de LL-NDK o VNDK-SP definidas por Google.
- Las dependencias de una biblioteca compartida de SP-HAL deben restringirse a bibliotecas de LL-NDK, bibliotecas de VNDK-SP definidas por Google, otras bibliotecas de SP-HAL o bibliotecas compartidas de otros proveedores que se puedan etiquetar como bibliotecas de SP-HAL-Dep.
- Una biblioteca compartida del proveedor se puede etiquetar como una biblioteca de SP-HAL-Dep solo si no es una biblioteca de AOSP y sus dependencias están restringidas a bibliotecas de LL-NDK, bibliotecas de VNDK-SP definidas por Google, bibliotecas de SP-HAL o cualquier otra biblioteca de SP-HAL-Dep.
- VNDK-SP debe ser independiente.
libRS_internal.so
recibe un tratamiento especial en Android 8.0, pero se volverá a revisar en una versión futura. - No se debe realizar ninguna comunicación entre el framework y el proveedor a través de interfaces que no sean HIDL, incluidos, entre otros, Binder, sockets, memorias compartidas, archivos, etcétera.
- El tamaño de la partición del sistema debe ser lo suficientemente grande como para contener dos copias de todas las bibliotecas de VNDK aptas y una copia de las bibliotecas compartidas del framework no aptas.
sepolicy
Los procesos del framework que se describen en esta sección corresponden a coredomain
en sepolicies, mientras que los procesos del proveedor corresponden a non-coredomain
. Por ejemplo, solo se puede acceder a /dev/binder
en coredomain
y solo se puede acceder a /dev/vndbinder
en no coredomain
.
Políticas similares restringen el acceso a las bibliotecas compartidas en las particiones del sistema y del proveedor. En la siguiente tabla, se muestran los derechos de acceso a bibliotecas compartidas de diferentes categorías:
Categoría | Partición | Accesible desde coredomain |
Se puede acceder desde dominios que no son del grafo principal |
---|---|---|---|
LL-NDK | Sistema | S | S |
LL-NDK-Private | Sistema | S | S |
VNDK-SP/VNDK-SP-Private | Sistema | S | S |
VNDK-SP-Ext | Proveedor | S | S |
VNDK | Sistema | S | S |
VNDK-Ext | Proveedor | N | S |
FWK-ONLY | Sistema | S | N |
FWK-ONLY-RS | Sistema | S | N |
SP-HAL | Proveedor | S | S |
SP-HAL-Dep | Proveedor | S | S |
VND-ONLY | Proveedor | N | S |
Se debe poder acceder a LL-NDK-Private y VNDK-SP-Private desde ambos dominios, ya que los no coredomain
accederán a ellos de forma indirecta. Del mismo modo, se debe poder acceder a SP-HAL-Dep desde coredomain
porque SP-HAL depende de ella.
Etiqueta same_process_hal_file
Las siguientes bibliotecas existen en la partición del proveedor. Haz que estas bibliotecas sean accesibles desde coredomain
y desde no coredomain
.
- VNDK-SP-Ext en
/vendor/lib[64]/vndk-sp
- SP-HAL en
/vendor/lib[64]
o/vendor/lib[64]/hw
- SP-HAL-Dep en
/vendor/lib[64]
o/vendor/lib[64]/hw
Etiqueta estos archivos de forma explícita como same_process_hal_file
, ya que coredomain
no puede acceder a nada de la partición vendor
de forma predeterminada. Agrega líneas similares a las siguientes al archivo file_contexts
específico del proveedor.
/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