Directorios, reglas y sepolicy

Esta página describe el diseño del directorio para dispositivos que ejecutan Android 8.0 y versiones posteriores, las reglas de VNDK y la política de seguridad asociada.

Diseño de directorio

El diseño de directorio degenerado consta de los siguientes directorios:

  • /system/lib[64] contiene todas las bibliotecas compartidas del marco, incluidas LL-NDK, VNDK y bibliotecas solo del marco (incluidas LL-NDK-Private y algunas bibliotecas con los mismos nombres que las de VNDK-SP).
  • /system/lib[64]/vndk-sp contiene bibliotecas VNDK-SP para HAL del mismo proceso.
  • /vendor/lib[64] contiene las bibliotecas VNDK extendidas por el proveedor (bibliotecas DXUA o DXUX VNDK), implementaciones HAL del mismo proceso y otras bibliotecas compartidas por el proveedor.
  • /vendor/lib[64]/vndk-sp puede contener las bibliotecas VNDK-SP extendidas por el proveedor.

Los módulos de proveedores cargan las bibliotecas VNDK desde /system/lib[64] .

reglas VNDK

Esta sección proporciona una lista completa de las reglas de VNDK:

  • Los procesos del marco no deben cargar bibliotecas compartidas que no sean SP-HAL desde particiones de proveedores (aplicado estrictamente a partir de Android 8.1).
  • Los procesos del proveedor no deben cargar bibliotecas que no sean LL-NDK, que no sean VNDK-SP ni que no sean VNDK desde la partición del sistema. (no se aplica estrictamente en Android O, pero se incluirá en una versión futura).
  • Las bibliotecas de VNDK instaladas deben ser un subconjunto de las bibliotecas de VNDK elegibles definidas por Google.
  • Las dependencias externas de SP-HAL y SP-HAL-Dep deben estar restringidas a bibliotecas LL-NDK o VNDK-SP definidas por Google.
    • Las dependencias de una biblioteca compartida SP-HAL deben estar restringidas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas por Google, otras bibliotecas SP-HAL u otras bibliotecas compartidas de proveedores que se pueden etiquetar como bibliotecas SP-HAL-Dep. .
    • Una biblioteca compartida de proveedor puede etiquetarse como biblioteca SP-HAL-Dep solo si no es una biblioteca AOSP y sus dependencias están restringidas a bibliotecas LL-NDK, bibliotecas VNDK-SP definidas por Google, bibliotecas SP-HAL o otras bibliotecas SP-HAL-Dep.
  • VNDK-SP debe ser autónomo. libRS_internal.so recibe un tratamiento especial en Android 8.0, pero se revisará en una versión futura.
  • No hay comunicación entre el marco y el proveedor a través de interfaces que no sean HIDL, incluidos (pero no limitados a) carpetas, sockets, memorias compartidas, archivos, etc.
  • El tamaño de la partición del sistema debe ser lo suficientemente grande como para contener dos copias de todas las bibliotecas VNDK elegibles y una copia de las bibliotecas compartidas del marco no elegible.

politica

Los procesos del marco descritos en esta sección corresponden a coredomain en sepolicies, mientras que los procesos de proveedores corresponden a non-coredomain . Por ejemplo, solo se puede acceder a /dev/binder en el dominio principal y solo se puede acceder a /dev/vndbinder coredomain coredomain no principal.

Políticas similares restringen el acceso a las bibliotecas compartidas en las particiones del sistema y del proveedor. La siguiente tabla muestra los derechos de acceso a bibliotecas compartidas de diferentes categorías:

Categoría Dividir Accesible desde
dominio principal
Accesible desde
dominio no central
LL-NDK Sistema Y Y
LL-NDK-Privado Sistema Y Y
VNDK-SP/VNDK-SP-Privado Sistema Y Y
VNDK-SP-Ext Vendedor Y Y
VNDK Sistema Y Y
VNDK-Ext Vendedor norte Y
SOLO FWK Sistema Y norte
FWK-SÓLO-RS Sistema Y norte
SP-HAL Vendedor Y Y
SP-HAL-Dep Vendedor Y Y
SOLO VND Vendedor norte Y

LL-NDK-Private y VNDK-SP-Private deben ser accesibles desde ambos dominios porque los que no coredomain accederán indirectamente a ellos. De manera similar, SP-HAL-Dep debe ser accesible desde coredomain porque SP-HAL se basa en él.

etiqueta same_process_hal_file

Las siguientes bibliotecas existen en la partición del proveedor. Haga que estas bibliotecas sean accesibles tanto desde el coredomain como desde el dominio 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

Etiquete explícitamente estos archivos como same_process_hal_file , porque coredomain no puede acceder a nada en la partición del vendor de forma predeterminada . Agregue 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