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 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 उपयोगकर्ता-स्पेस एमटीई को एक बार चालू करता है (set 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).

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