سیاست های SELinux برای تست دستگاه

وقتی atest تست‌های دستگاه را اجرا می‌کند، atest فایل باینری تست و منابع آن را به پارتیشن /data منتقل می‌کند و آن را با adb shell اجرا می‌کند. فایل اجرایی تست از دامنه SELinux shell استفاده می‌کند؛ بنابراین، سیاست‌های SELinux را دریافت می‌کند. مرتبط با دامنه shell . هنگامی که دستگاه در حالت SELinux اجباری اجرا می‌شود، آزمایش‌های دستگاهی که این خط‌مشی‌ها را نقض می‌کنند با خطای SELinux شکست می‌خورند.

نکته قابل توجه این است که دامنه shell domain) allow برای موارد زیر ندارد :

  • دسترسی به فایل‌های موجود در پارتیشن /vendor ، از جمله پیوند دادن به کتابخانه‌های نصب شده در پارتیشن /vendor .

  • یک رابط Binder دلخواه را فراخوانی کنید.

اگر یک تست دستگاه به یک یا هر دوی این مجوزها نیاز داشته باشد، باید تست را با مجوزهای root اجرا کنید. وقتی adbd مجوزهای ریشه دارد، adbd از دامنه su SELinux روی دستگاه به جای shell استفاده می‌کند که دارای امتیازات بیشتر.

برای اجرای تست دستگاه با استفاده از مجوزهای روت، ویژگی require_root: true را به تعریف ماژول Soong مربوطه در فایل 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,
}