Katalogi, zasady i sepolityka

Na tej stronie opisano układ katalogów dla urządzeń z systemem Android 8.0 i nowszym, reguły VNDK i powiązane zasady sepolice.

Układ katalogu

Zdegenerowany układ katalogów składa się z następujących katalogów:

  • /system/lib[64] zawiera wszystkie biblioteki współdzielone frameworka, w tym LL-NDK, VNDK i biblioteki tylko frameworku (w tym LL-NDK-Private i niektóre biblioteki o takich samych nazwach jak te w VNDK-SP).
  • /system/lib[64]/vndk-sp zawiera biblioteki VNDK-SP dla warstw HAL tego samego procesu.
  • /vendor/lib[64] zawiera biblioteki VNDK rozszerzone przez dostawcę (biblioteki DXUA lub DXUX VNDK), implementacje HAL tego samego procesu i biblioteki współdzielone innych dostawców.
  • /vendor/lib[64]/vndk-sp może zawierać biblioteki VNDK-SP rozszerzone przez dostawcę.

Moduły dostawcy ładują biblioteki VNDK z /system/lib[64] .

Regulamin VNDK

W tej sekcji znajduje się obszerna lista zasad VNDK:

  • Procesy ramowe nie mogą ładować bibliotek współdzielonych innych niż SP-HAL z partycji dostawcy (ściśle egzekwowane, począwszy od systemu Android 8.1).
  • Procesy dostawcy nie mogą ładować bibliotek innych niż LL-NDK, innych niż VNDK-SP i innych niż VNDK z partycji systemowej. (nie jest to ściśle egzekwowane w systemie Android O, ale będzie w przyszłej wersji).
  • Zainstalowane biblioteki VNDK muszą stanowić podzbiór kwalifikujących się bibliotek VNDK zdefiniowanych przez Google.
  • Zewnętrzne zależności SP-HAL i SP-HAL-Dep muszą być ograniczone do bibliotek LL-NDK lub zdefiniowanych przez Google bibliotek VNDK-SP.
    • Zależności biblioteki współdzielonej SP-HAL muszą być ograniczone do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, innych bibliotek SP-HAL i/lub bibliotek współdzielonych innych dostawców, które można oznaczyć jako biblioteki SP-HAL-Dep .
    • Bibliotekę współdzieloną dostawcy można oznaczyć jako bibliotekę SP-HAL-Dep tylko wtedy, gdy nie jest to biblioteka AOSP, a jej zależności są ograniczone do bibliotek LL-NDK, bibliotek VNDK-SP zdefiniowanych przez Google, bibliotek SP-HAL i/lub inne biblioteki SP-HAL-Dep.
  • VNDK-SP musi być samodzielny. libRS_internal.so jest traktowana w systemie Android 8.0 w specjalny sposób, ale zostanie ponownie omówiona w przyszłej wersji.
  • Brak komunikacji między dostawcą frameworka poprzez interfejsy inne niż HIDL, w tym (ale nie wyłącznie) segregatory, gniazda, współdzielone pamięci, pliki itp.
  • Rozmiar partycji systemowej musi być wystarczająco duży, aby pomieścić dwie kopie wszystkich kwalifikujących się bibliotek VNDK i kopię niekwalifikujących się bibliotek współdzielonych platformy.

sepolityka

Procesy ramowe opisane w tej sekcji odpowiadają coredomain w sepolicie, podczas gdy procesy dostawcy odpowiadają non-coredomain . Na przykład dostęp do /dev/binder można uzyskać tylko w coredomain , a /dev/vndbinder można uzyskać tylko w domenie innej niż coredomain .

Podobne zasady ograniczają dostęp do bibliotek współdzielonych na partycjach systemowych i dostawcy. Poniższa tabela przedstawia uprawnienia dostępu do bibliotek współdzielonych różnych kategorii:

Kategoria Przegroda Dostępne od
domena rdzeniowa
Dostępne od
niebędące domeną rdzeniową
LL-NDK System Y Y
LL-NDK-prywatny System Y Y
VNDK-SP/VNDK-SP-prywatny System Y Y
VNDK-SP-Ext Sprzedawca Y Y
VNDK System Y Y
VNDK-Ext Sprzedawca N Y
TYLKO FWK System Y N
FWK-TYLKO-RS System Y N
SP-HAL Sprzedawca Y Y
SP-HAL-Dep Sprzedawca Y Y
TYLKO VND Sprzedawca N Y

LL-NDK-Private i VNDK-SP-Private muszą być dostępne z obu domen, ponieważ osoby spoza coredomain będą miały do ​​nich pośredni dostęp. Podobnie SP-HAL-Dep musi być dostępny z coredomain , ponieważ SP-HAL na niej polega.

etykieta pliku same_process_hal_file

W partycji dostawcy znajdują się następujące biblioteki. Udostępnij te biblioteki zarówno z coredomain , jak i spoza coredomain .

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

Jawnie oznacz te pliki jako same_process_hal_file , ponieważ wszystko na partycji vendor jest domyślnie niedostępne dla coredomain . Dodaj linie podobne do poniższych do pliku file_contexts specyficznego dla dostawcy.

/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