MTE बूटलोडर की सुविधा

Android 13 में, उपयोगकर्ता स्पेस के लिए एक ABI पेश किया गया है. इससे बूटलोडर को अनुरोध किए गए MTE मोड के बारे में जानकारी मिलती है. इसका इस्तेमाल उन डिवाइसों पर एमटीई को चालू करने के लिए किया जा सकता है जिनमें हार्डवेयर सपोर्ट है, लेकिन एमटीई डिफ़ॉल्ट रूप से चालू नहीं होता. इसके अलावा, इसका इस्तेमाल उन डिवाइसों पर एमटीई को बंद करने के लिए भी किया जा सकता है जिनमें यह सुविधा डिफ़ॉल्ट रूप से चालू होती है.

बूटलोडर सपोर्ट

इस ABI के साथ काम करने के लिए, आपके बूटलोडर को misc पार्टीशन से misc_memtag_message ( bootloader_message.h में तय किया गया) को पढ़ना होगा. अगर कोई मान्य misc_memtag_message मिलता है (MISC_VIRTUAL_AB_MAGIC_HEADER मैच करता है और वर्शन नंबर काम करता है), तो बूटलोडर

memtag = (default_memtag && !(misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_OFF)) ||
      misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG ||
      misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE

memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||
      misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE

default_memtag, SKU के लिए memtag चालू/बंद करने की डिफ़ॉल्ट सेटिंग है. अगर memtag सही है, तो बूटलोडर, MTE टैग के लिए जगह रिज़र्व करता है. साथ ही, अपवाद के निचले लेवल में टैग की जांच करने की सुविधा चालू करता है. इसके अलावा, DT के ज़रिए कर्नेल को टैग के लिए रिज़र्व की गई जगह की जानकारी देता है. अगर memtag की वैल्यू false है, तो बूटलोडर, कर्नल कमांड लाइन में arm64.nomte जोड़ता है.

अगर memtag_kernel सही है, तो बूटलोडर, कर्नल कमांड लाइन में kasan=on जोड़ता है. ऐसा न होने पर, यह kasan=off जोड़ता है.

बूटलोडर को हर बूट पर MISC_MEMTAG_MODE_MEMTAG_ONCE और MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE को साफ़ करना ज़रूरी है.

अगर बूटलोडर fastboot oem mte के साथ काम करता है, तो सेट को MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} से (1, 0, 0) पर और बंद को (0, 0, 1) पर सेट करें. साथ ही, अन्य फ़्लैग को बनाए रखें.

आपको अपने प्रॉडक्ट को कॉन्फ़िगर करना होगा, ताकि यूज़रस्पेस सपोर्ट के लिए mtectrl बाइनरी बनाई जा सके. इसके बाद, ro.arm64.memtag.bootctl_supported सिस्टम प्रॉपर्टी सेट करें, ताकि सिस्टम को यह पता चल सके कि आपके बूटलोडर में memtag मैसेज की सुविधा काम करती है.

उपयोगकर्ता इंटरफ़ेस

ro.arm64.memtag.bootctl_supported प्रॉपर्टी सेट होने पर, डेवलपर के लिए बनी सेटिंग और टूल मेन्यू में मौजूद बटन की मदद से, उपयोगकर्ता एक बार एमटीई को चालू करके रीबूट कर सकता है. इस सुविधा को उन ऐप्लिकेशन डेवलपर के लिए बनाया गया है जो MTE की मदद से अपने ऐप्लिकेशन की जांच करना चाहते हैं. एमटीई डेवलपर विकल्प का स्क्रीनशॉट.

सिस्टम प्रॉपर्टी

ज़्यादा बेहतर तरीके से इस्तेमाल करने के लिए, सिस्टम प्रॉपर्टी arm64.memtag.bootctl में कॉमा लगाकर अलग की गई इन वैल्यू की सूची शामिल की जा सकती है:

  • memtag: उपयोगकर्ता-स्पेस MTE को हमेशा के लिए चालू करें (set MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once: उपयोगकर्ता-स्पेस MTE को एक बार चालू करें (set MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel: enable kernel-space MTE (set MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: enable kernel-space MTE once (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: MTE को बंद करें (set MISC_MEMTAG_MODE_MEMTAG_OFF)

नई सेटिंग लागू करने के लिए, सिस्टम को रीबूट करना होगा. ऐसा इसलिए, क्योंकि इसे बूटलोडर लागू करता है.