デバイステストの SELinux ポリシー

atest がデバイステストを実行すると、atest はテストバイナリとそのリソースを /data パーティションにプッシュし、adb shell で実行します。テスト実行可能ファイル は shell SELinux ドメインを使用するため、SELinux ポリシー shell ドメインに関連付けられたものとして受け取ります。デバイスが強制 SELinux モードで実行されている場合、これらのポリシーに違反するデバイステストは SELinux エラーで失敗します。

特に、shell ドメインには次の allow ルールがありません

  • /vendor パーティションにインストールされたライブラリとのリンクなど、/vendor パーティション上のファイルへのアクセス。

  • 任意の Binder インターフェースの呼び出し。

デバイステストでこれらの権限のいずれかまたは両方が必要な場合は、root 権限でテストを実行する必要がありますadbd に root 権限がある場合、adbd は権限の多い shell ではなく、デバイス上の su SELinux ドメインを使用します。

root 権限を使用してデバイステストを実行するには、Android.bp ファイルの対応する Soong モジュール定義に require_root: true プロパティを追加します。

// file: Android.bp

rust_test {
    name: "example_rust_test_that requires root",

    // ...

    rustlibs: [
        "some-vendor-lib",
    ],
    // This example test requires root permissions, because it calls Binder
    // interfaces unavailable for the shell, and also links with a vendor
    // library.
    require_root: true,
}