Directory, regole e sepolicy

Questa pagina descrive il layout della directory per i dispositivi con Android 8.0 e versioni successive, le regole VNDK e il file sepolicy associato.

Layout della directory

Il layout degenere della directory è costituito dalle seguenti directory:

  • /system/lib[64] contiene tutte le librerie condivise del framework, tra cui LL-NDK, VNDK e librerie solo per il framework (tra cui LL-NDK-Private e alcune librerie con gli stessi nomi di quelle in VNDK-SP).
  • /system/lib[64]/vndk-sp contiene librerie VNDK-SP per HAL nello stesso processo.
  • /vendor/lib[64] contiene le librerie VNDK estese dal fornitore (librerie VNDK DXUA o DXUX), le implementazioni HAL nello stesso processo e altre librerie condivise del fornitore.
  • /vendor/lib[64]/vndk-sp potrebbe contenere le librerie VNDK-SP estese dal fornitore.

I moduli del fornitore caricano le librerie VNDK da /system/lib[64].

Regole VNDK

Questa sezione fornisce un elenco completo delle regole VNDK:

  • I processi del framework non devono caricare librerie condivise non SP-HAL dalle partizioni del fornitore (disposizione applicata rigorosamente a partire da Android 8.1).
  • I processi del fornitore non devono caricare librerie non LL-NDK, non VNDK-SP e non VNDK dalla partizione di sistema. (non applicata rigorosamente in Android O, ma lo sarà in una release futura).
  • Le librerie VNDK installate devono essere un sottoinsieme di librerie VNDK idonee definite da Google.
  • Le dipendenze esterne di SP-HAL e SP-HAL-Dep devono essere limitate alle librerie VNDK-SP o LL-NDK definite da Google.
    • Le dipendenze di una libreria condivisa SP-HAL devono essere limitate alle librerie LL-NDK, alle librerie VNDK-SP definite da Google, ad altre librerie SP-HAL e/o ad altre librerie condivise del fornitore che possono essere etichettate come librerie SP-HAL-Dep.
    • Una libreria condivisa del fornitore può essere etichettata come libreria SP-HAL-Dep solo se non è una libreria AOSP e le sue dipendenze sono limitate alle librerie LL-NDK, alle librerie VNDK-SP definite da Google, alle librerie SP-HAL e/o ad altre librerie SP-HAL-Dep.
  • VNDK-SP deve essere autonomo. libRS_internal.so riceve un trattamento speciale in Android 8.0, ma verrà rivisto in una release futura.
  • Nessuna comunicazione tra il framework e il fornitore tramite interfacce non HIDL, inclusi, a titolo esemplificativo, binder, socket, memorie condivise, file e così via.
  • La dimensione della partizione di sistema deve essere sufficientemente grande da contenere due copie di tutte le librerie VNDK idonee e una copia delle librerie condivise del framework non idonee.

sepolicy

I processi del framework descritti in questa sezione corrispondono a coredomain in sepolicies, mentre i processi del fornitore corrispondono a non-coredomain. Ad esempio, è possibile accedere a /dev/binder solo in coredomain e a /dev/vndbinder solo in non-coredomain.

Criteri simili limitano l'accesso alle librerie condivise nelle partizioni di sistema e del fornitore. La seguente tabella mostra i diritti di accesso alle librerie condivise di diverse categorie:

Categoria Partizione Accessibile da
coredomain
Accessibile da
non-coredomain
LL-NDK Sistema Y Y
LL-NDK-Private Sistema Y Y
VNDK-SP/VNDK-SP-Private Sistema Y Y
VNDK-SP-Ext Fornitore Y Y
VNDK Sistema Y Y
VNDK-Ext Fornitore N Y
SOLO FWK Sistema Y N
FWK-ONLY-RS Sistema Y N
SP-HAL Fornitore Y Y
SP-HAL-Dep Fornitore Y Y
SOLO VND Fornitore N Y

LL-NDK-Private e VNDK-SP-Private devono essere accessibili da entrambi i domini perché non-coredomain vi accederà indirettamente. Analogamente, SP-HAL-Dep deve essere accessibile dacoredomain perché SP-HAL si basa su questo.

Etichetta same_process_hal_file

Nella partizione del fornitore sono presenti le seguenti librerie. Rendi queste librerie accessibili sia da coredomain sia da non coredomain.

  • VNDK-SP-Ext in /vendor/lib[64]/vndk-sp
  • SP-HAL in /vendor/lib[64] o /vendor/lib[64]/hw
  • SP-HAL-Dep in /vendor/lib[64] o /vendor/lib[64]/hw

Etichetta esplicitamente questi file come same_process_hal_file, perché per impostazione predefinita qualsiasi elemento nella partizione vendor non è accessibile a coredomain. Aggiungi righe simili alle seguenti al file file_contexts specifico del fornitore.

/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