Каталоги, правила и sepolicy

На этой странице описывается макет каталога для устройств под управлением Android 8.0 и выше, правила VNDK и связанная с ними политика безопасности.

Макет каталога

Вырожденная структура каталогов состоит из следующих каталогов:

  • /system/lib[64] содержит все общие библиотеки фреймворка, включая LL-NDK, VNDK и библиотеки, предназначенные только для фреймворка (в том числе LL-NDK-Private и некоторые библиотеки с теми же названиями, что и в VNDK-SP).
  • /system/lib[64]/vndk-sp содержит библиотеки VNDK-SP для HAL, работающих в том же процессе.
  • /vendor/lib[64] содержит библиотеки VNDK, расширенные поставщиком (библиотеки VNDK DXUA или DXUX), реализации HAL в том же процессе и другие общие библиотеки поставщика.
  • /vendor/lib[64]/vndk-sp может содержать библиотеки VNDK-SP, расширенные поставщиком.

Модули поставщика загружают библиотеки VNDK из /system/lib[64].

Правила VNDK

В этом разделе приведен полный список правил VNDK:

  • Процессы фреймворка не должны загружать общие библиотеки, не относящиеся к SP-HAL, из разделов поставщика (строгое требование, начиная с Android 8.1).
  • Процессы поставщика не должны загружать библиотеки, не относящиеся к LL-NDK, VNDK-SP и VNDK, из системного раздела. (в Android O это требование не является обязательным, но будет введено в будущих версиях).
  • Установленные библиотеки VNDK должны быть подмножеством допустимых библиотек VNDK, определенных Google.
  • Внешние зависимости SP-HAL и SP-HAL-Dep должны быть ограничены библиотеками LL-NDK или VNDK-SP, определенными Google.
    • Зависимости общей библиотеки SP-HAL должны быть ограничены библиотеками LL-NDK, библиотеками VNDK-SP, определенными Google, другими библиотеками SP-HAL и/или другими общими библиотеками поставщиков, которые могут быть помечены как библиотеки SP-HAL-Dep.
    • Общая библиотека поставщика может быть помечена как библиотека SP-HAL-Dep, только если она не является библиотекой AOSP и ее зависимости ограничены библиотеками LL-NDK, библиотеками VNDK-SP, определенными Google, библиотеками SP-HAL и/или другими библиотеками SP-HAL-Dep.
  • VNDK-SP должен быть автономным. libRS_internal.so получает особый статус в Android 8.0, но в будущем мы пересмотрим этот подход.
  • Обмен данными между фреймворком и поставщиком должен осуществляться только через интерфейсы HIDL, а не через binder, сокеты, общую память, файлы и т. д.
  • Размер системного раздела должен быть достаточно большим, чтобы вместить две копии всех подходящих библиотек VNDK и копию неприемлемых общих библиотек фреймворка.

sepolicy

Процессы фреймворка, описанные в этом разделе, соответствуют coredomain в sepolicies, а процессы поставщика – non-coredomain. Например, /dev/binder доступен только в coredomain, а /dev/vndbinder – только в других coredomain странах.

Аналогичные правила ограничивают доступ к общим библиотекам в разделах system и vendor. В таблице ниже показаны права доступа к общим библиотекам разных категорий:

Категория Раздел Доступно из
coredomain
Доступно из
неосновного домена
LL-NDK Система Г Г
LL-NDK-Private Система Г Г
VNDK-SP/VNDK-SP-Private Система Г Г
VNDK-SP-Ext Поставщик Г Г
VNDK Система Г Г
VNDK-Ext Поставщик НЕТ Г
FWK-ONLY Система Г НЕТ
FWK-ONLY-RS Система Г НЕТ
SP-HAL Поставщик Г Г
SP-HAL-Dep Поставщик Г Г
ТОЛЬКО ДЛЯ VND Поставщик НЕТ Г

LL-NDK-Private и VNDK-SP-Private должны быть доступны из обоих доменов, поскольку не относящиеся к coredomain компоненты будут обращаться к ним косвенно. Аналогичным образом SP-HAL-Dep должен быть доступен из coredomain, поскольку SP-HAL зависит от него.

Ярлык same_process_hal_file

В разделе поставщика находятся следующие библиотеки: Сделайте эти библиотеки доступными как из coredomain, так и из других источниковcoredomain.

  • VNDK-SP-Ext в /vendor/lib[64]/vndk-sp
  • SP-HAL в /vendor/lib[64] или /vendor/lib[64]/hw
  • SP-HAL-Dep в /vendor/lib[64] или /vendor/lib[64]/hw

Явно пометьте эти файлы как same_process_hal_file, поскольку все, что находится в разделе vendor, по умолчанию недоступно для coredomain. Добавьте в файл file_contexts, относящийся к определенному поставщику, строки, похожие на приведенные ниже.

/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