MTE कॉन्फ़िगरेशन

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

इस दस्तावेज़ में, एमटीई की सेटिंग और दायरे के बारे में बताया गया है. हमारे हिसाब से, यह Android उपयोगकर्ताओं के लिए सुरक्षा और लागत के बीच एक अच्छा समझौता है. ऐसा इसलिए, क्योंकि यह हमेशा चालू रहने वाली कमज़ोरी को कम करता है.

कर्नेल

कर्नेल में MTE को कमांड लाइन की मदद से कॉन्फ़िगर किया जाता है. सिंक मोड में, डिफ़ॉल्ट रूप से यह सेटिंग चालू रहती है. आने वाले समय में, इसकी कीमत कई वजहों से बदल सकती है:

  • इससे परफ़ॉर्मेंस पर काफ़ी असर पड़ता है और इसे ऑप्टिमाइज़ करने की ज़रूरत होती है.
  • आम तौर पर, यह माना जाता है कि कोर कोड की क्वालिटी, एमटीई को लागू करने वाले मोड (यानी, गड़बड़ी होने पर पैनिक मोड) में शिप करने के लिए काफ़ी नहीं है.

फ़िलहाल, हमारा सुझाव है कि आप प्रोडक्शन डिवाइसों पर kernel MTE को बंद करें. ऐसा करने के लिए, कर्नल कमांड लाइन में kasan=off जोड़ें.

Userspace

Google, उपयोगकर्ता स्पेस की उन बाइनरी की डिफ़ॉल्ट सूची उपलब्ध कराता है जिन्हें एमटीई की मदद से सुरक्षित किया जाना है. इस सूची को Android Security के इनपुट के साथ बनाया गया था. इसमें ऐसे कॉम्पोनेंट शामिल हैं जिनके पास खास सुविधाएं हैं और/या जो भरोसेमंद नहीं हैं. MTE के साथ इस्तेमाल करने के लिए सुझाई गई नेटिव बाइनरी की अप-टू-डेट सूची, Android के बिल्ड सिस्टम में memtag-common.mk फ़ाइल में देखी जा सकती है. इसके अलावा, कई सिस्टम ऐप्लिकेशन भी शामिल हैं: फ़िलहाल, Nfc, ब्लूटूथ, और SecureElement. ये बाइनरी और ऐप्लिकेशन, डिफ़ॉल्ट रूप से एसिंक्रोनस मोड में चालू होते हैं.

हमारा सुझाव है कि डिफ़ॉल्ट टारगेट सूची का इस्तेमाल करें. इसमें कोई बदलाव करने की ज़रूरत नहीं है. इसके अलावा, हमारा सुझाव है कि मुख्य सिस्टम में जोड़े गए बीएसपी और OEM के एलिमेंट का आकलन करें. साथ ही, सुरक्षा से जुड़े एलिमेंट के लिए एमटीई चालू करें.

ऐप्लिकेशन

फ़िलहाल, ऊपर दिए गए तीन सिस्टम ऐप्लिकेशन ही, MTE का इस्तेमाल कर रहे हैं. तीसरे पक्ष के किसी ऐप्लिकेशन के लिए, एमटीई को चालू करने के लिए, उसके AndroidManifest.xml को android:memtagMode के लिए, off के अलावा कोई दूसरी वैल्यू तय करनी होगी. इसलिए, Geekbench या AnTuTu जैसे सामान्य बेंचमार्क सुइट, MTE के साथ काम नहीं करते. अगर कर्नेल MTE भी बंद है (ऊपर kasan=off देखें), तो उम्मीद है कि परफ़ॉर्मेंस पर इसका असर बहुत कम होगा.

अन्य ऐप्लिकेशन के लिए, Chrome में एमटीई के साथ काम करने की सुविधा पर काम किया जा रहा है. Chrome के Play Store के मौजूदा वर्शन में, मेनिफ़ेस्ट में memtagMode=async सेटिंग शामिल है. हमें उम्मीद है कि Android नेटवर्क पर मौजूद, सुरक्षा को ध्यान में रखकर बनाए गए कई ऐप्लिकेशन (जैसे, बैंकिंग ऐप्लिकेशन) भी ऐसा करेंगे. दूसरी ओर, हमें उम्मीद है कि गेम जैसे कुछ ऐप्लिकेशन, सीपीयू की बेहतर परफ़ॉर्मेंस की ज़रूरत होने पर, एमटीई को बंद रखेंगे.

अन्य मोड

ऊपर दिए गए निर्देशों में, हर जगह सिर्फ़ एसिंक्रोनस एमटीई मोड का इस्तेमाल किया जाता है. हार्डवेयर के हिसाब से, अन्य मोड भी उतने ही या इससे भी ज़्यादा तेज़ हो सकते हैं. साथ ही, ये बेहतर तरीके से गड़बड़ी की जानकारी देते हैं और कमज़ोरियों को कम करने के लिए कुछ बेहतर प्रॉपर्टी भी देते हैं.

हमारा सुझाव है कि एक या दो अन्य कॉन्फ़िगरेशन को टेस्ट करके देखें कि वे आपकी परफ़ॉर्मेंस/पावर की ज़रूरतों के लिए सही हैं या नहीं. /sys/devices/system/cpu/cpu*/mte_tcf_preferred में लिखकर, सिस्टम के हर सीपीयू कोर के लिए, MTE मोड सेट किए जा सकते हैं. उदाहरण के लिए, sync (या asymm) लिखने पर, उस कोर पर चलने के दौरान, यूज़रस्पेस की ऐसी किसी भी प्रोसेस को चुपचाप सिंक (या असिम) में अपने-आप अपग्रेड कर दिया जाएगा जिसने ऐसिंक मोड का अनुरोध किया है. डिवाइस के बूट होने के समय, .rc फ़ाइल में यह सेटअप किया जा सकता है.

हमारा सुझाव है कि एक या दो अन्य कॉन्फ़िगरेशन को मेज़र करें, ताकि यह पता लगाया जा सके कि वे आपकी परफ़ॉर्मेंस और पावर की ज़रूरतों को पूरा करते हैं या नहीं. एक्सप्लोर करने के लिए कुछ दिलचस्प कॉन्फ़िगरेशन:

  • सभी कोर पर Asymm.
  • बड़े कोर पर असिमिम, अन्य कोर पर सिंक.

यह पुष्टि करने के लिए कि कोई प्रोसेस, ऐसिंक मोड (संभावित ऑटो-अपग्रेड के साथ) का अनुरोध कर रही है या नहीं, देखें कि नीचे दी गई लाइन में PR_MTE_TCF_SYNC और PR_MTE_TCF_ASYNC, दोनों शामिल हैं या नहीं:

  debuggerd <PID> | head -30 | grep tagged_addr

माफ़ करें, किसी प्रोसेस के लिए, लागू मोड को देखने का कोई आसान तरीका नहीं है. हालांकि, ऊपर दी गई दोनों वैल्यू दिखाने वाली कोई भी प्रोसेस, अपने-आप अपग्रेड होने की सुविधा के दायरे में आती है.