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

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

बूटलोडर से जुड़ी सहायता

इस एबीआई के साथ काम करने के लिए, आपके बूटलोडर को 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 सही है, तो बूटलोडर, MTE टैग रिज़र्वेशन सेट अप करता है, कम अपवाद वाले लेवल में टैग की जांच चालू करता है, और DT के ज़रिए टैग के रिज़र्व किए गए क्षेत्र की जानकारी को कर्नेल को भेजता है. अगर memtag गलत है, तो बूटलोडर, कमांड लाइन में arm64.nomte को जोड़ता है.

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

बूटलोडर को हर बार बूट करने पर, 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 सिस्टम प्रॉपर्टी सेट करें कि आपका बूटलोडर, मेमटैग मैसेज के साथ काम करता है.

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

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

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

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

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

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