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

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

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

इस ABI के साथ काम करने के लिए, आपके बूटलोडर को misc पार्टिशन से misc_memtag_message ( bootloader_message.h में तय किया गया) को पढ़ना होगा. अगर कोई मान्य misc_memtag_message मिलता है (MISC_MEMTAG_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 true है, तो बूटलोडर, एमटीई टैग रिज़र्वेशन सेट अप करता है. साथ ही, अपवाद के निचले लेवल में टैग की जांच करने की सुविधा चालू करता है. इसके अलावा, डिवाइसट्री (डीटी) की मदद से, रिज़र्व किए गए टैग वाले क्षेत्र की जानकारी कर्नल को देता है. अगर memtag को false पर सेट किया गया है, तो बूटलोडर, कर्नल कमांड लाइन में arm64.nomte जोड़ता है.

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

बूटलोडर को हर बूट पर MISC_MEMTAG_MODE_MEMTAG_ONCE और MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE को हटाना होगा.

अगर बूटलोडर fastboot oem mte के साथ काम करता है, तो on आर्ग्युमेंट को MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} फ़्लैग को (1, 0, 0) पर सेट करना चाहिए. साथ ही, off आर्ग्युमेंट को उन्हें (0, 0, 1) पर सेट करना चाहिए. हालांकि, ऐसा करते समय अन्य फ़्लैग में कोई बदलाव नहीं होना चाहिए.

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

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

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

MTE डेवलपर विकल्प

पहली इमेज. MTE डेवलपर विकल्प.

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

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

  • memtag उपयोगकर्ता-स्पेस एमटीई को हमेशा के लिए चालू करता है (set MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once उपयोगकर्ता-स्पेस एमटीई को एक बार चालू करता है (सेट MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel, कर्नल-स्पेस एमटीई को चालू करता है (सेट MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once, कर्नल-स्पेस एमटीई को एक बार चालू करता है (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE सेट करें).
  • memtag-off MTE को बंद करता है (set MISC_MEMTAG_MODE_MEMTAG_OFF).

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