ไดเรกทอรี กฎ และ sepolicy

หน้านี้อธิบายเลย์เอาต์ไดเรกทอรีสำหรับอุปกรณ์ที่ใช้ Android 8.0 ขึ้นไป กฎ VNDK และ sepolicy ที่เกี่ยวข้อง

เลย์เอาต์ไดเรกทอรี

เลย์เอาต์ไดเรกทอรีที่เปลี่ยนรูปแบบประกอบด้วยไดเรกทอรีต่อไปนี้

  • /system/lib[64] มีไลบรารีที่ใช้ร่วมกันทั้งหมดของเฟรมเวิร์ก ซึ่งรวมถึง LL-NDK, VNDK และไลบรารีสำหรับเฟรมเวิร์กเท่านั้น (รวมถึง LL-NDK-Private และไลบรารีบางรายการที่มีชื่อเหมือนกับใน VNDK-SP)
  • /system/lib[64]/vndk-sp มีไลบรารี VNDK-SP สำหรับ HAL ในกระบวนการเดียวกัน
  • /vendor/lib[64] มีไลบรารี VNDK ที่ผู้ให้บริการขยาย (ไลบรารี VNDK ของ DXUA หรือ DXUX) การใช้งาน HAL ในกระบวนการเดียวกัน และไลบรารีที่ผู้ให้บริการรายอื่นแชร์
  • /vendor/lib[64]/vndk-sp อาจมีไลบรารี VNDK-SP ที่ขยายโดยผู้ให้บริการ

โมดูลของผู้ให้บริการจะโหลดไลบรารี VNDK จาก /system/lib[64]

กฎ VNDK

ส่วนนี้จะแสดงรายการกฎ VNDK ที่ครอบคลุม

  • กระบวนการเฟรมเวิร์กต้องไม่โหลดไลบรารีที่ใช้ร่วมกันที่ไม่ใช่ SP-HAL จากพาร์ติชันของผู้ให้บริการ (บังคับใช้อย่างเข้มงวดตั้งแต่ Android 8.1 เป็นต้นไป)
  • กระบวนการของผู้ให้บริการต้องไม่โหลดไลบรารีที่ไม่ใช่ LL-NDK, ไม่ใช่ VNDK-SP และไม่ใช่ VNDK จากพาร์ติชันระบบ (ไม่ได้บังคับใช้อย่างเข้มงวดใน Android แต่จะบังคับใช้ในรุ่นต่อๆ ไป)
  • ไลบรารี 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 และทรัพยากร Dependency ของไลบรารีดังกล่าวจำกัดไว้เฉพาะไลบรารี LL-NDK, ไลบรารี VNDK-SP ที่ Google กำหนด, ไลบรารี SP-HAL และ/หรือไลบรารี SP-HAL-Dep อื่นๆ
  • VNDK-SP ต้องทำงานได้ด้วยตัวเอง libRS_internal.so ได้รับการประมวลผลพิเศษใน Android 8.0 แต่เราจะกลับมาดูเรื่องนี้ในรุ่นที่จะออกในอนาคต
  • ไม่มีการสื่อสารระหว่างเฟรมเวิร์กกับผู้ให้บริการผ่านอินเทอร์เฟซที่ไม่ใช่ HIDL ซึ่งรวมถึง (แต่ไม่จำกัดเพียง) Binder, ซ็อกเก็ต, หน่วยความจำที่แชร์, ไฟล์ ฯลฯ
  • ขนาดของพาร์ติชันระบบต้องใหญ่พอที่จะเก็บสำเนาของไลบรารี VNDK ที่มีสิทธิ์ทั้งหมด 2 รายการและสำเนาของไลบรารีที่แชร์เฟรมเวิร์กที่ไม่มีสิทธิ์ 1 รายการ

sepolicy

กระบวนการของเฟรมเวิร์กที่อธิบายในส่วนนี้สอดคล้องกับ coredomain ใน sepolicies ส่วนกระบวนการของผู้ให้บริการสอดคล้องกับ non-coredomain เช่น /dev/binder เข้าถึงได้เฉพาะใน coredomain และ /dev/vndbinder เข้าถึงได้เฉพาะในไม่ใช่ 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 ต้องเข้าถึงได้จากทั้ง 2 โดเมน เนื่องจากโดเมนที่ไม่ใช่ coredomain จะเข้าถึงโดเมนเหล่านี้ได้แบบอ้อม ในทํานองเดียวกัน SP-HAL-Dep ต้องเข้าถึงได้จาก coredomain เนื่องจาก SP-HAL ต้องใช้ SP-HAL-Dep

ป้ายกำกับ same_process_hal_file

ไลบรารีต่อไปนี้อยู่ในพาร์ติชันของผู้ให้บริการ ทำให้เข้าถึงไลบรารีเหล่านี้ได้จากทั้งcoredomainและไม่ใช่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