Directory, regole e sepolicy

Questa pagina descrive il layout della directory per i dispositivi che eseguono Android 8.0 e versioni successive, le regole VNDK e la sepolicy associata.

Disposizione delle directory

Il layout della directory degenerato è costituito dalle seguenti directory:

  • /system/lib[64] contiene tutte le librerie condivise del framework, incluse LL-NDK, VNDK e le librerie solo framework (incluse LL-NDK-Private e alcune librerie con gli stessi nomi di quelle in VNDK-SP).
  • /system/lib[64]/vndk-sp contiene le librerie VNDK-SP per HAL dello stesso processo.
  • /vendor/lib[64] contiene le librerie VNDK estese dal fornitore (librerie VNDK DXUA o DXUX), implementazioni HAL dello stesso processo e librerie condivise di altri fornitori.
  • /vendor/lib[64]/vndk-sp può 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 (applicate 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 applicato rigorosamente in Android O ma sarà in una versione futura).
  • Le librerie VNDK installate devono essere un sottoinsieme delle librerie VNDK idonee definite da Google.
  • Le dipendenze esterne di SP-HAL e SP-HAL-Dep devono essere limitate alle librerie LL-NDK o VNDK-SP 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 alle librerie condivise di altri fornitori 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 altre librerie SP-HAL-Dep.
  • VNDK-SP deve essere autonomo. libRS_internal.so riceve un trattamento speciale in Android 8.0, ma verrà rivisitato in una versione futura.
  • Nessuna comunicazione tra fornitore di framework tramite interfacce non HIDL, inclusi (ma non limitati a) raccoglitori, socket, memorie condivise, file, ecc.
  • 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 framework descritti in questa sezione corrispondono a coredomain nelle sepolicies mentre i processi del fornitore corrispondono a non-coredomain . Ad esempio, è possibile accedere /dev/binder solo nel coredomain e /dev/vndbinder solo nel coredomain .

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

Categoria Partizione Accessibile da
coredominio
Accessibile da
dominio non principale
LL-NDK Sistema Y Y
LL-NDK-Privato Sistema Y Y
VNDK-SP/VNDK-SP-Privato Sistema Y Y
VNDK-SP-est Venditore Y Y
VNDK Sistema Y Y
VNDK-Est Venditore N Y
SOLO FWK Sistema Y N
FWK-SOLO-RS Sistema Y N
SP-HAL Venditore Y Y
SP-HAL-Dip Venditore Y Y
SOLO VND Venditore N Y

LL-NDK-Private e VNDK-SP-Private devono essere accessibili da entrambi i domini perché il dominio non coredomain vi accederà indirettamente. Allo stesso modo, SP-HAL-Dep deve essere accessibile da coredomain perché SP-HAL si basa su di esso.

etichetta same_process_hal_file

Nella partizione del fornitore esistono le seguenti librerie. Rendi queste librerie accessibili sia coredomain che da quello 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é qualsiasi cosa nella partizione vendor non è accessibile per impostazione predefinita a coredomain . Aggiungere 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