Directorios, reglas y sepolicy

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