ส่วนขยายการแท็กหน่วยความจำแขน

Arm v9 ขอแนะนำ Arm Memory Tagging Extension (MTE) ซึ่ง เป็นการใช้งานฮาร์ดแวร์ ของหน่วยความจำที่แท็ก

ในระดับสูง MTE จะแท็กการจัดสรร/จัดสรรหน่วยความจำแต่ละรายการด้วยข้อมูลเมตาเพิ่มเติม โดยจะกำหนดแท็กให้กับตำแหน่งหน่วยความจำ ซึ่งสามารถเชื่อมโยงกับพอยน์เตอร์ที่อ้างอิงตำแหน่งหน่วยความจำนั้นได้ ณ รันไทม์ CPU จะตรวจสอบว่าตัวชี้และแท็กข้อมูลเมตาตรงกันในการโหลดและจัดเก็บแต่ละครั้ง

ใน Android 12 ตัวจัดสรรหน่วยความจำฮีปเคอร์เนลและ userspace สามารถเพิ่มการจัดสรรแต่ละรายการด้วยข้อมูลเมตาได้ ซึ่งจะช่วยตรวจจับจุดบกพร่องที่ไร้การใช้งานและบัฟเฟอร์ล้น ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดของจุดบกพร่องด้านความปลอดภัยของหน่วยความจำในโค้ดเบสของเรา

โหมดการทำงานของ MTE

MTE มีโหมดการทำงานสามโหมด:

  • โหมดซิงโครนัส (SYNC)
  • โหมดอะซิงโครนัส (ASYNC)
  • โหมดอสมมาตร (ASYMM)

โหมดซิงโครนัส (SYNC)

โหมดนี้ได้รับการปรับให้เหมาะสมเพื่อความถูกต้องของการตรวจจับจุดบกพร่องเหนือประสิทธิภาพ และสามารถใช้เป็นเครื่องมือตรวจจับจุดบกพร่องได้อย่างแม่นยำ เมื่อยอมรับค่าใช้จ่ายด้านประสิทธิภาพที่สูงกว่าได้ เมื่อเปิดใช้งาน MTE SYNC จะทำหน้าที่เป็นระบบลดความปลอดภัย เมื่อแท็กไม่ตรงกัน ตัวประมวลผลจะยกเลิกการดำเนินการทันทีและยุติกระบวนการด้วย SIGSEGV (รหัส SEGV_MTESERR ) และข้อมูลทั้งหมดเกี่ยวกับการเข้าถึงหน่วยความจำและที่อยู่ที่มีข้อบกพร่อง

เราขอแนะนำให้ใช้โหมดนี้ในระหว่างการทดสอบเป็นทางเลือกแทน HWASan/KASAN หรือในการใช้งานจริงเมื่อกระบวนการเป้าหมายแสดงถึงพื้นผิวการโจมตีที่มีช่องโหว่ นอกจากนี้ เมื่อโหมด ASYNC ระบุว่ามีจุดบกพร่อง สามารถรับรายงานจุดบกพร่องที่แม่นยำได้โดยใช้รันไทม์ API เพื่อสลับการดำเนินการเป็นโหมด SYNC

เมื่อทำงานในโหมด SYNC ตัวจัดสรร Android จะบันทึกการติดตามสแต็กสำหรับการจัดสรรและการจัดสรรคืนทั้งหมด และใช้รายการเหล่านั้นเพื่อจัดทำรายงานข้อผิดพลาดที่ดีขึ้น ซึ่งรวมถึงคำอธิบายข้อผิดพลาดของหน่วยความจำ เช่น การใช้งานหลังจากไม่มีการใช้งาน หรือบัฟเฟอร์ล้น และสแต็ก ร่องรอยของเหตุการณ์ความทรงจำที่เกี่ยวข้อง รายงานดังกล่าวให้ข้อมูลตามบริบทมากขึ้น และทำให้ติดตามและแก้ไขจุดบกพร่องได้ง่ายขึ้น

โหมดอะซิงโครนัส (ASYNC)

โหมดนี้ได้รับการปรับให้เหมาะสมเพื่อประสิทธิภาพที่มากกว่าความแม่นยำของรายงานข้อบกพร่อง และสามารถใช้เป็นการตรวจจับค่าใช้จ่ายต่ำสำหรับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำ
บนแท็กที่ไม่ตรงกัน ตัวประมวลผลจะดำเนินการดำเนินการต่อไปจนกว่ารายการเคอร์เนลที่ใกล้ที่สุด (เช่น syscall หรือการขัดจังหวะตัวจับเวลา) โดยที่ยุติกระบวนการด้วย SIGSEGV (โค้ด SEGV_MTEAERR ) โดยไม่บันทึกที่อยู่ที่มีข้อบกพร่องหรือการเข้าถึงหน่วยความจำ
เราขอแนะนำให้ใช้โหมดนี้ในการใช้งานจริงบนโค้ดเบสที่ได้รับการทดสอบอย่างดี โดยที่ความหนาแน่นของจุดบกพร่องด้านความปลอดภัยของหน่วยความจำต่ำ ซึ่งทำได้โดยใช้โหมด SYNC ในระหว่างการทดสอบ

โหมดอสมมาตร (ASYMM)

คุณสมบัติเพิ่มเติมใน Arm v8.7-A โหมด Asymmetric MTE ให้การตรวจสอบการอ่านหน่วยความจำแบบซิงโครนัส และการตรวจสอบการเขียนหน่วยความจำแบบอะซิงโครนัส โดยมีประสิทธิภาพใกล้เคียงกับโหมด ASYNC ในสถานการณ์ส่วนใหญ่ โหมดนี้เป็นการปรับปรุงเหนือโหมด ASYNC และเราขอแนะนำให้ใช้แทน ASYNC ทุกครั้งที่พร้อมใช้งาน

ด้วยเหตุนี้ ไม่มี API ใดที่อธิบายไว้ด้านล่างนี้กล่าวถึงโหมดอสมมาตร แต่ระบบปฏิบัติการสามารถกำหนดค่าให้ใช้โหมดอสมมาตรเสมอเมื่อมีการร้องขอแบบอะซิงโครนัส โปรดดูส่วน "การกำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU" สำหรับข้อมูลเพิ่มเติม

MTE ในพื้นที่ผู้ใช้

ส่วนต่อไปนี้จะอธิบายวิธีการเปิดใช้งาน MTE สำหรับกระบวนการของระบบและแอปพลิเคชัน MTE ถูกปิดใช้งานตามค่าเริ่มต้น เว้นแต่ว่าตัวเลือกใดตัวเลือกหนึ่งด้านล่างจะถูกตั้งค่าสำหรับกระบวนการเฉพาะ (ดูว่าองค์ประกอบใดที่ MTE เปิดใช้งานสำหรับ ด้านล่าง )

การเปิดใช้งาน MTE โดยใช้ระบบบิลด์

เนื่องจากเป็นคุณสมบัติทั่วทั้งกระบวนการ MTE จะถูกควบคุมโดยการตั้งค่าเวลาในการสร้างของไฟล์ปฏิบัติการหลัก ตัวเลือกต่อไปนี้อนุญาตให้เปลี่ยนการตั้งค่านี้สำหรับไฟล์ปฏิบัติการแต่ละรายการ หรือสำหรับไดเรกทอรีย่อยทั้งหมดในแผนผังต้นทาง การตั้งค่าจะถูกละเว้นในไลบรารีหรือเป้าหมายใดๆ ที่ไม่สามารถปฏิบัติการหรือทดสอบได้

1. การเปิดใช้งาน MTE ใน Android.bp ( ตัวอย่าง ) สำหรับโครงการเฉพาะ:

โหมดเอ็มทีอี การตั้งค่า
MTE แบบอะซิงโครนัส
  sanitize: {
  memtag_heap: true,
  }
MTE แบบซิงโครนัส
  sanitize: {
  memtag_heap: true,
  diag: {
  memtag_heap: true,
  },
  }

หรือใน Android.mk:

โหมดเอ็มทีอี การตั้งค่า
Asynchronous MTE LOCAL_SANITIZE := memtag_heap
Synchronous MTE LOCAL_SANITIZE := memtag_heap
LOCAL_SANITIZE_DIAG := memtag_heap

2. การเปิดใช้งาน MTE บนไดเร็กทอรีย่อยในแผนผังต้นทางโดยใช้ตัวแปรผลิตภัณฑ์:

โหมดเอ็มทีอี รวมรายการ ยกเว้นรายการ
อะซิงโครนัส PRODUCT_MEMTAG_HEAP_ASYNC_INCLUDE_PATHS MEMTAG_HEAP_ASYNC_INCLUDE_PATHS PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS
ซิงค์ PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS MEMTAG_HEAP_SYNC_INCLUDE_PATHS

หรือ

โหมดเอ็มทีอี การตั้งค่า
MTE แบบอะซิงโครนัส MEMTAG_HEAP_ASYNC_INCLUDE_PATHS
MTE แบบซิงโครนัส MEMTAG_HEAP_SYNC_INCLUDE_PATHS

หรือโดยการระบุเส้นทางแยกของไฟล์ปฏิบัติการ:

โหมดเอ็มทีอี การตั้งค่า
MTE แบบอะซิงโครนัส PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS MEMTAG_HEAP_EXCLUDE_PATHS
MTE แบบซิงโครนัส

ตัวอย่าง (การใช้งานคล้ายกับ PRODUCT_CFI_INCLUDE_PATHS )

  PRODUCT_MEMTAG_HEAP_SYNC_INCLUDE_PATHS=vendor/$(vendor)
  PRODUCT_MEMTAG_HEAP_EXCLUDE_PATHS=vendor/$(vendor)/projectA \
                                    vendor/$(vendor)/projectB

การเปิดใช้งาน MTE โดยใช้คุณสมบัติของระบบ

การตั้งค่าบิลด์ด้านบนสามารถแทนที่ได้ขณะรันไทม์โดยการตั้งค่าคุณสมบัติของระบบต่อไปนี้:

arm64.memtag.process.<basename> = (off|sync|async)

โดยที่ basename หมายถึงชื่อฐานของไฟล์ปฏิบัติการ

ตัวอย่างเช่น หากต้องการตั้งค่า /system/bin/ping หรือ /data/local/tmp/ping เพื่อใช้ MTE แบบอะซิงโครนัส ให้ใช้ adb shell setprop arm64.memtag.process.ping async

การเปิดใช้งาน MTE โดยใช้ตัวแปรสภาพแวดล้อม

อีกวิธีหนึ่งในการแทนที่การตั้งค่าบิลด์คือการกำหนดตัวแปรสภาพแวดล้อม: MEMTAG_OPTIONS=(off|sync|async) หากมีการกำหนดทั้งตัวแปรสภาพแวดล้อมและคุณสมบัติระบบ ตัวแปรจะมีความสำคัญกว่า

การเปิดใช้งาน MTE สำหรับแอปพลิเคชัน

หากไม่ได้ระบุ MTE จะถูกปิดใช้งานตามค่าเริ่มต้น แต่แอปที่ต้องการใช้ MTE สามารถทำได้โดยการตั้งค่า android:memtagMode ใต้แท็ก <application> หรือ <process> ใน AndroidManifest.xml

android:memtagMode=(off|default|sync|async)

เมื่อตั้งค่าบนแท็ก <application> คุณลักษณะจะส่งผลต่อกระบวนการทั้งหมดที่ใช้โดยแอปพลิเคชัน และสามารถแทนที่ได้สำหรับแต่ละกระบวนการโดยการตั้งค่าแท็ก <process>

สำหรับการทดลอง สามารถใช้ การเปลี่ยนแปลงความเข้ากันได้ เพื่อตั้งค่าเริ่มต้นของแอตทริบิวต์ memtagMode สำหรับแอปพลิเคชันที่ไม่ได้ระบุค่าใดๆ ในรายการ (หรือระบุ default )
สิ่งเหล่านี้สามารถพบได้ภายใต้ System > Advanced > Developer options > App Compatibility Changes ในเมนูการตั้งค่าส่วนกลาง การตั้งค่า NATIVE_MEMTAG_ASYNC หรือ NATIVE_MEMTAG_SYNC จะเปิดใช้งาน MTE สำหรับแอปพลิเคชันเฉพาะ
หรือสามารถตั้งค่าได้โดยใช้คำสั่ง am ดังต่อไปนี้:

$ adb shell am compat enable NATIVE_MEMTAG_[A]SYNC my.app.name

การสร้างอิมเมจระบบ MTE

เราขอแนะนำอย่างยิ่งให้เปิดใช้งาน MTE บนไบนารีดั้งเดิมทั้งหมดในระหว่างการพัฒนาและการพัฒนา ซึ่งจะช่วยตรวจจับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำตั้งแต่เนิ่นๆ และให้ความครอบคลุมแก่ผู้ใช้ตามความเป็นจริง หากเปิดใช้งานในการทดสอบบิลด์

เราขอแนะนำอย่างยิ่งให้เปิดใช้งาน MTE ในโหมดซิงโครนัสบนไบนารีดั้งเดิมทั้งหมดในระหว่างการพัฒนา

SANITIZE_TARGET=memtag_heap SANITIZE_TARGET_DIAG=memtag_heap m

เช่นเดียวกับตัวแปรใดๆ ในระบบบิลด์ SANITIZE_TARGET สามารถใช้เป็นตัวแปรสภาพแวดล้อมหรือการตั้งค่า make (เช่น ในไฟล์ product.mk )
โปรดทราบว่าการดำเนินการนี้จะเปิดใช้งาน MTE สำหรับกระบวนการดั้งเดิมทั้งหมด แต่ไม่ใช่สำหรับแอปพลิเคชัน (ซึ่งแยกจาก zygote64 ) ซึ่งสามารถเปิดใช้งาน MTE โดยทำตามคำแนะนำ ด้านบน

การกำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU

ใน CPU บางตัว ประสิทธิภาพของ MTE ในโหมด ASYMM หรือแม้แต่ SYNC อาจใกล้เคียงกับของ ASYNC สิ่งนี้ทำให้คุ้มค่าที่จะเปิดใช้การตรวจสอบที่เข้มงวดยิ่งขึ้นบน CPU เหล่านั้นเมื่อมีการร้องขอโหมดการตรวจสอบที่เข้มงวดน้อยกว่า เพื่อให้ได้รับประโยชน์จากการตรวจจับข้อผิดพลาดของการตรวจสอบที่เข้มงวดยิ่งขึ้นโดยไม่มีข้อเสียด้านประสิทธิภาพ
ตามค่าเริ่มต้น กระบวนการที่กำหนดค่าให้ทำงานในโหมด ASYNC จะทำงานในโหมด ASYNC บน CPU ทั้งหมด ในการกำหนดค่าเคอร์เนลเพื่อรันกระบวนการเหล่านี้ในโหมด SYNC บน CPU เฉพาะ การซิงค์ค่าจะต้องเขียนลงในรายการ sysfs /sys/devices/system/cpu/cpu<N>/mte_tcf_preferred ณ เวลาบูต ซึ่งสามารถทำได้ด้วยสคริปต์เริ่มต้น ตัวอย่างเช่น ในการกำหนดค่า CPU 0-1 เพื่อรันกระบวนการในโหมด ASYNC ในโหมด SYNC และ CPU 2-3 เพื่อใช้รันในโหมด ASYMM สิ่งต่อไปนี้อาจถูกเพิ่มเข้าไปในส่วนคำสั่ง init ของสคริปต์เริ่มต้นของผู้ขาย:

  write /sys/devices/system/cpu/cpu0/mte_tcf_preferred sync
  write /sys/devices/system/cpu/cpu1/mte_tcf_preferred sync
  write /sys/devices/system/cpu/cpu2/mte_tcf_preferred asymm
  write /sys/devices/system/cpu/cpu3/mte_tcf_preferred asymm

Tombstones จากกระบวนการโหมด ASYNC ที่ทำงานในโหมด SYNC จะมีการติดตามสแต็กที่แม่นยำของตำแหน่งของข้อผิดพลาดของหน่วยความจำ อย่างไรก็ตาม จะไม่รวมการติดตามสแต็กการจัดสรรหรือการจัดสรรคืน การติดตามสแต็กเหล่านี้จะพร้อมใช้งานก็ต่อเมื่อมีการกำหนดค่ากระบวนการให้ทำงานในโหมด SYNC เท่านั้น

int mallopt(M_THREAD_DISABLE_MEM_INIT, level)

โดยที่ level คือ 0 หรือ 1
ปิดใช้งานการกำหนดค่าเริ่มต้นหน่วยความจำใน malloc และหลีกเลี่ยงการเปลี่ยนแท็กหน่วยความจำ เว้นแต่จำเป็นเพื่อความถูกต้อง

int mallopt(M_MEMTAG_TUNING, level)

level ไหน:

  • M_MEMTAG_TUNING_BUFFER_OVERFLOW
  • M_MEMTAG_TUNING_UAF

เลือกกลยุทธ์การจัดสรรแท็ก

  • การตั้งค่าเริ่มต้นคือ M_MEMTAG_TUNING_BUFFER_OVERFLOW
  • M_MEMTAG_TUNING_BUFFER_OVERFLOW - เปิดใช้งานการตรวจจับเชิงกำหนดของบัฟเฟอร์ล้นเชิงเส้นและข้อบกพร่องอันเดอร์โฟลว์โดยการกำหนดค่าแท็กที่แตกต่างให้กับการจัดสรรที่อยู่ติดกัน โหมดนี้มีโอกาสลดลงเล็กน้อยในการตรวจจับจุดบกพร่องที่ไร้การใช้งาน เนื่องจากมีเพียงครึ่งหนึ่งของค่าแท็กที่เป็นไปได้สำหรับตำแหน่งหน่วยความจำแต่ละตำแหน่ง โปรดทราบว่า MTE ไม่สามารถตรวจพบโอเวอร์โฟลว์ภายในแท็กแกรนูลเดียวกัน (ชิงค์ที่จัดเรียง 16 ไบต์) และอาจพลาดโอเวอร์โฟลว์เล็กๆ น้อยๆ ได้แม้ในโหมดนี้ การโอเวอร์โฟลว์ดังกล่าวไม่สามารถเป็นสาเหตุของความเสียหายของหน่วยความจำได้ เนื่องจากหน่วยความจำภายในหนึ่งแกรนูลไม่เคยถูกใช้สำหรับการจัดสรรหลายครั้ง
  • M_MEMTAG_TUNING_UAF - เปิดใช้งานแท็กแบบสุ่มอย่างอิสระสำหรับความน่าจะเป็นที่สม่ำเสมอ ~93% ในการตรวจจับทั้งเชิงพื้นที่ (บัฟเฟอร์ล้น) และข้อบกพร่องชั่วคราว (ใช้หลังจากอิสระ)

นอกเหนือจาก API ที่อธิบายไว้ข้างต้นแล้ว ผู้ใช้ที่มีประสบการณ์อาจต้องการทราบสิ่งต่อไปนี้:

  • การตั้งค่าการลงทะเบียนฮาร์ดแวร์ PSTATE.TCO สามารถระงับการตรวจสอบแท็กได้ชั่วคราว ( ตัวอย่าง ) ตัวอย่างเช่น เมื่อคัดลอกช่วงหน่วยความจำที่มีเนื้อหาแท็กที่ไม่รู้จัก หรือแก้ไขปัญหาคอขวดของประสิทธิภาพในฮอตลูป
  • เมื่อใช้ M_HEAP_TAGGING_LEVEL_SYNC ตัวจัดการข้อขัดข้องของระบบจะให้ข้อมูลเพิ่มเติม เช่น การจัดสรรและการติดตามสแต็กการจัดสรรคืน ฟังก์ชันนี้ต้องการการเข้าถึงบิตแท็ก และเปิดใช้งานโดยส่งแฟล็ก SA_EXPOSE_TAGBITS เมื่อตั้งค่าตัวจัดการสัญญาณ โปรแกรมใด ๆ ที่ตั้งค่าตัวจัดการสัญญาณของตัวเองและมอบหมายการขัดข้องที่ไม่ทราบสาเหตุให้กับระบบขอแนะนำให้ทำเช่นเดียวกัน

MTE ในเคอร์เนล

หากต้องการเปิดใช้งาน KASAN ที่เร่งด้วย MTE สำหรับเคอร์เนล ให้กำหนดค่าเคอร์เนลด้วย CONFIG_KASAN=y , CONFIG_KASAN_HW_TAGS=y การกำหนดค่าเหล่านี้เปิดใช้งานตามค่าเริ่มต้นบนเคอร์เนล GKI เริ่มต้นด้วย Android 12-5.10
ซึ่งสามารถควบคุมได้ในเวลาบูตโดยใช้อาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้:

  • kasan=[on|off] - เปิดหรือปิดการใช้งาน KASAN (ค่าเริ่มต้น: on )
  • kasan.mode=[sync |async ] - เลือกระหว่างโหมดซิงโครนัสและอะซิงโครนัส (ค่าเริ่มต้น: sync )
  • kasan.stacktrace=[on|off] - ไม่ว่าจะรวบรวมการติดตามสแต็ก (ค่าเริ่มต้น: on )
    • การรวบรวมการติดตามสแต็กยังต้องการ stack_depot_disable=off
  • kasan.fault=[report|panic] - ไม่ว่าจะพิมพ์เฉพาะรายงานหรือตื่นตระหนกเคอร์เนลด้วย (ค่าเริ่มต้น: report ) โดยไม่คำนึงถึงตัวเลือกนี้ การตรวจสอบแท็กจะถูกปิดใช้งานหลังจากข้อผิดพลาดที่รายงานครั้งแรก

เราขอแนะนำอย่างยิ่งให้ใช้โหมด SYNC ในระหว่างการเริ่มต้น การพัฒนา และการทดสอบ ตัวเลือกนี้ควรเปิดใช้งานแบบโกลบอลสำหรับกระบวนการทั้งหมดที่ใช้ ตัวแปรสภาพแวดล้อม หรือกับ ระบบบิลด์ ในโหมดนี้ ข้อบกพร่องจะถูกตรวจพบตั้งแต่เนิ่นๆ ของกระบวนการพัฒนา โค้ดเบสจะมีความเสถียรเร็วขึ้น และไม่ต้องเสียค่าใช้จ่ายในการตรวจจับข้อบกพร่องในภายหลังในการผลิต

เราขอแนะนำอย่างยิ่งให้ใช้โหมด ASYNC ในการใช้งานจริง นี่เป็นเครื่องมือที่มีค่าใช้จ่ายต่ำสำหรับการตรวจจับข้อบกพร่องด้านความปลอดภัยของหน่วยความจำในกระบวนการตลอดจนการป้องกันในเชิงลึกเพิ่มเติม เมื่อตรวจพบข้อบกพร่อง นักพัฒนาสามารถใช้ประโยชน์จากรันไทม์ API เพื่อสลับไปที่โหมด SYNC และรับการติดตามสแต็กที่แม่นยำจากกลุ่มผู้ใช้ตัวอย่าง

เราขอแนะนำอย่างยิ่งให้กำหนดค่าระดับ MTE ที่ต้องการเฉพาะ CPU สำหรับ SoC โดยทั่วไปโหมด Asymm จะมีลักษณะการทำงานเหมือนกับ ASYNC และมักจะดีกว่าเสมอ แกนประมวลผลขนาดเล็กมักจะแสดงประสิทธิภาพที่คล้ายคลึงกันในทั้งสามโหมด และสามารถกำหนดค่าให้เลือกใช้ SYNC ได้

นักพัฒนาควรตรวจสอบการมีอยู่ของข้อขัดข้องโดยการตรวจสอบ /data/tombstones logcat หรือโดยการตรวจสอบไปป์ไลน์ DropboxManager ของผู้จำหน่ายเพื่อหาจุดบกพร่องของผู้ใช้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการดีบักโค้ดเนทิฟของ Android โปรดดูข้อมูล ที่นี่

ส่วนประกอบแพลตฟอร์มที่เปิดใช้งาน MTE

ใน Android 12 ส่วนประกอบของระบบที่มีความสำคัญด้านความปลอดภัยจำนวนหนึ่งใช้ MTE ASYNC เพื่อตรวจจับข้อขัดข้องของผู้ใช้ปลายทางและทำหน้าที่เป็นชั้นการป้องกันเชิงลึกเพิ่มเติม ส่วนประกอบเหล่านี้คือ:

  • daemons เครือข่ายและยูทิลิตี้ (ยกเว้น netd )
  • Bluetooth, SecureElement, NFC HAL และแอปพลิเคชันระบบ
  • statsd มอน
  • system_server
  • zygote64 (เพื่ออนุญาตให้แอปพลิเคชันเลือกใช้ MTE)

เป้าหมายเหล่านี้ถูกเลือกตามเกณฑ์ต่อไปนี้:

  • กระบวนการที่มีสิทธิ์พิเศษ (หมายถึงกระบวนการที่สามารถเข้าถึงบางสิ่งที่โดเมน SELinux ที่ไม่มีสิทธิ์เข้าถึงแอปไม่ได้)
  • ประมวลผลอินพุตที่ไม่น่าเชื่อถือ ( กฎข้อที่สอง )
  • การชะลอตัวของประสิทธิภาพที่ยอมรับได้ (การชะลอตัวไม่ได้สร้างเวลาแฝงที่มองเห็นได้ของผู้ใช้)

เราสนับสนุนให้ผู้จำหน่ายเปิดใช้งาน MTE ในการผลิตสำหรับส่วนประกอบเพิ่มเติมตามเกณฑ์ที่กล่าวไว้ข้างต้น ในระหว่างการพัฒนา เราขอแนะนำให้ทดสอบส่วนประกอบเหล่านี้โดยใช้โหมด SYNC เพื่อตรวจจับจุดบกพร่องที่แก้ไขได้ง่าย และประเมินผลกระทบของ ASYNC ต่อประสิทธิภาพการทำงาน
ในอนาคต Android วางแผนที่จะขยายรายการส่วนประกอบของระบบที่เปิดใช้งาน MTE โดยได้รับคำแนะนำจากคุณลักษณะด้านประสิทธิภาพของการออกแบบฮาร์ดแวร์ที่กำลังจะมีขึ้น