ディレクトリ、ルール、sepolicy

このページでは、Android 8.0 以降を搭載するデバイスのディレクトリ レイアウト、VNDK ルール、および関連する sepolicy について説明します。

ディレクトリ レイアウト

縮退ディレクトリ レイアウトは、以下のディレクトリで構成されます。

  • /system/lib[64] には、LL-NDK、VNDK、フレームワークのみのライブラリ(LL-NDK-Private、VNDK-SP のライブラリと同名の一部のライブラリを含む)など、すべてのフレームワーク共有ライブラリが含まれます。
  • /system/lib[64]/vndk-sp には、same-process HAL の VNDK-SP ライブラリが含まれます。
  • /vendor/lib[64] には、ベンダーによって拡張された VNDK ライブラリ(DXUA または DXUX VNDK ライブラリのどちらか)、same-process HAL の実装、およびその他のベンダーの共有ライブラリが含まれます。
  • /vendor/lib[64]/vndk-sp には、ベンダーによって拡張された VNDK-SP ライブラリが含まれる可能性があります。

ベンダー モジュールは、/system/lib[64] から VNDK ライブラリを読み込みます。

VNDK のルール

このセクションでは、VNDK のルールの包括的なリストについて説明します。

  • フレームワーク プロセスは、SP-HAL 以外の共有ライブラリをベンダー パーティションから読み込むことができません(Android 8.1 から厳格に適用されます)。
  • ベンダー プロセスは、システム パーティションから LL-NDK、VNDK-SP、VNDK ではないライブラリを読み込むことができません(Android O では厳格には適用されませんが、今後のリリースで厳格に適用されます)。
  • インストールされた VNDK ライブラリは、Google が定義した有効な VNDK ライブラリのサブセットである必要があります。
  • SP-HAL と SP-HAL-Dep の外部依存関係は、LL-NDK または Google 定義の VNDK-SP ライブラリに制限される必要があります。
    • SP-HAL 共有ライブラリの依存関係は、LL-NDK ライブラリ、Google 定義の VNDK-SP ライブラリ、他の SP-HAL ライブラリ、または SP-HAL-Dep ライブラリとしてラベル付けできる他のベンダー共有ライブラリに制限される必要があります。
    • ベンダー共有ライブラリは、AOSP ライブラリではなく、依存関係が LL-NDK ライブラリ、Google 定義の VNDK-SP ライブラリ、SP-HAL ライブラリ、またはその他の SP-HAL-Dep ライブラリに制限されている場合にのみ、SP-HAL-Dep ライブラリとしてラベル付けできます。
  • VNDK-SP は自己完結型である必要があります。libRS_internal.so は、Android 8.0 では特別な扱いを受けますが、今後のリリースで見直される予定です。
  • バインダー、ソケット、共有メモリ、ファイルなど、HIDL インターフェース以外を介したフレームワーク ベンダーとの通信はありません。
  • システム パーティションのサイズは、すべての有効な VNDK ライブラリのコピー 2 つと、無効なフレームワーク共有ライブラリのコピー 1 つを含めることができる十分な大きさである必要があります。

sepolicy

このセクションで説明するフレームワークのプロセスは、sepolicy の coredomain に対応し、ベンダーのプロセスは non-coredomain に対応します。たとえば、/dev/bindercoredomain でのみアクセスができ、/dev/vndbindercoredomain 以外でのみアクセスができます。

同様のポリシーは、システム パーティションとベンダー パーティション上の共有ライブラリへのアクセスを制限します。次の表に、異なるカテゴリの共有ライブラリにアクセスするための権限を示します。

カテゴリ パーティション コアドメイン
からアクセスできる
コアドメイン以外
からアクセスできる
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-ONLY ベンダー いいえ はい

LL-NDK-Private と VNDK-SP-Private には、coredomain 以外が間接的にアクセスするため、どちらのドメインからもアクセスできる必要があります。同様に、SP-HAL-Dep は SP-HAL が依存しているため、coredomain からアクセスできる必要があります。

same_process_hal_file ラベル

ベンダー パーティションには次のライブラリが存在します。これらのライブラリを coredomaincoredomain 以外の両方からアクセスできるようにします。

  • /vendor/lib[64]/vndk-sp の VNDK-SP-Ext
  • /vendor/lib[64] または /vendor/lib[64]/hw の SP-HAL
  • /vendor/lib[64] または /vendor/lib[64]/hw の SP-HAL-Dep

vendor パーティションにあるものはすべて、デフォルトでは coredomain にアクセスできないため、これらのファイルには明示的に same_process_hal_file としてラベルを付けます。ベンダー固有の 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