Règles SELinux pour les tests d'appareils

Lorsque atest exécute des tests sur l'appareil, il envoie le binaire de test et ses ressources à la partition /data, puis l'exécute avec adb shell.atest L'exécutable de test utilise le shell domaine SELinux. Par conséquent, il reçoit les règles SELinux associées au domaine shell. Lorsque l'appareil est exécuté en mode SELinux appliqué, les tests d'appareil qui enfreignent ces règles échouent avec une erreur SELinux.

Le domaine shell ne comporte pas de règles allow pour les éléments suivants :

  • Accéder aux fichiers de la partition /vendor, y compris les liens avec les bibliothèques installées sur la partition /vendor.

  • Appeler une interface Binder arbitraire.

Si un test d'appareil nécessite l'une de ces autorisations ou les deux, vous devez l'exécuter avec des autorisations root. Lorsque adbd dispose d'autorisations root, adbd utilise le domaine SELinux su sur l'appareil au lieu de shell, qui dispose de davantage de privilèges.

Pour exécuter un test d'appareil à l'aide d'autorisations root, ajoutez la propriété require_root: true à la définition du module Soong correspondant dans le fichier Android.bp.

// 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,
}