בדף הזה מתוארים פריסת הספריות במכשירים עם Android מגרסה 8.0 ואילך, כללי VNDK ומדיניות האבטחה המשויכת.
פריסת הספרייה
פריסת הספריות המשולבת מורכבת מהספריות הבאות:
/system/lib[64]
מכיל את כל הספריות המשותפות של המסגרת, כולל LL-NDK, VNDK וספריות של המסגרת בלבד (כולל LL-NDK-Private וספריות מסוימות עם שמות זהים לאלה שב-VNDK-SP)./system/lib[64]/vndk-sp
מכילה ספריות VNDK-SP ל-HALs באותו תהליך./vendor/lib[64]
מכיל את ספריות ה-VNDK שהספק הרחיב (ספריות VNDK של DXUA או DXUX), הטמעות HAL באותו תהליך וספריות משותפות אחרות של הספק./vendor/lib[64]/vndk-sp
עשוי להכיל את ספריות VNDK-SP שהורחבו על ידי הספק.
מודולים של ספקים טוענים את ספריות VNDK מ-/system/lib[64]
.
כללי VNDK
בקטע הזה מופיעה רשימה מקיפה של כללי VNDK:
- תהליכי Framework אסור להם לטעון ספריות משותפות שאינן 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, כולל (בין היתר) מחברים, שקעים, זיכרונות משותפים, קבצים וכו'.
- הגודל של מחיצת המערכת צריך להיות גדול מספיק כדי להכיל שני עותקים של כל הספריות שעומדות בדרישות של VNDK, ועותק של ספריות משותפות של מסגרות שלא עומדות בדרישות.
sepolicy
תהליכי המסגרת שמתוארים בקטע הזה תואמים ל-coredomain
ב-sepolicies, ותהליכי הספקים תואמים ל-non-coredomain
. לדוגמה, אפשר לגשת ל-/dev/binder
רק ב-coredomain
, ול-/dev/vndbinder
רק ב-non-coredomain
.
כללי מדיניות דומים מגבילים את הגישה לספריות המשותפות במחיצות המערכת ובמחיצות של הספקים. בטבלה הבאה מפורטות ההרשאות לגישה לספריות משותפות בקטגוריות שונות:
קטגוריה | מחיצה | גישה מ- coredomain |
גישה מ- דומיין שאינו של הליבה |
---|---|---|---|
LL-NDK | מערכת | Y | Y |
LL-NDK-Private | מערכת | Y | Y |
VNDK-SP/VNDK-SP-Private | מערכת | Y | Y |
VNDK-SP-Ext | ספק | Y | Y |
VNDK | מערכת | Y | Y |
VNDK-Ext | ספק | לא | Y |
FWK-ONLY | מערכת | Y | לא |
FWK-ONLY-RS | מערכת | Y | לא |
SP-HAL | ספק | Y | Y |
SP-HAL-Dep | ספק | Y | Y |
VND בלבד | ספק | לא | Y |
צריכה להיות גישה ל-LL-NDK-Private ול-VNDK-SP-Private משני הדומיינים, כי coredomain
לא תהיה להם גישה ישירה אליהם. באופן דומה, צריכה להיות גישה ל-SP-HAL-Dep מ-coredomain
כי SP-HAL מסתמך עליו.
תווית same_process_hal_file
הספריות הבאות נמצאות במחיצה של הספק. צריך להפוך את הספריות האלה לנגישות גם מ-coredomain
וגם מ-non-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
, כי כברירת מחדל אין ל-coredomain
גישה לכל מה שמופיע במחיצה vendor
. מוסיפים שורות דומות לזו הבאה לקובץ 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