Google 致力于为黑人社区推动种族平等。查看具体举措
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

टैग की गईं संकेत

एंड्रॉइड 11 में शुरू, 64-बिट प्रक्रियाओं के लिए, सभी हीप आवंटन में एआरएम टॉप-बाइट इग्नोर (टीबीआई) के लिए कर्नेल समर्थन वाले उपकरणों पर सूचक के शीर्ष बाइट में एक कार्यान्वयन परिभाषित टैग सेट है। कोई भी एप्लिकेशन जो इस टैग को संशोधित करता है, जब डीलक्लोलेशन के दौरान टैग की जांच की जाती है। यह एआरएम मेमोरी टैगिंग एक्सटेंशन (एमटीई) समर्थन के साथ भविष्य के हार्डवेयर के लिए आवश्यक है।

टॉप-बाइट को इग्नोर करें

ARM का टॉप बाइट इग्नोर फीचर सभी आर्मव 8 AArch64 हार्डवेयर में 64-बिट कोड के लिए उपलब्ध है। इस सुविधा का अर्थ है कि हार्डवेयर मेमोरी को एक्सेस करते समय एक पॉइंटर के शीर्ष बाइट को अनदेखा करता है।

TBI को एकसंगत कर्नेल की आवश्यकता होती है, जो यूज़रस्पेस से पारित टैगर्स को सही ढंग से हैंडल करता है। 4.14 (पिक्सेल 4) से एंड्रॉइड कॉमन कर्नेल और उच्चतर आवश्यक TBI पैच हैं

कर्नेल में TBI समर्थन वाले उपकरणों को गतिशील रूप से प्रक्रिया प्रारंभ समय पर पता लगाया जाता है और कार्यान्वयन-निर्भर टैग को सभी हीप आवंटन के लिए सूचक के शीर्ष बाइट में डाला जाता है। इसके बाद, यह सुनिश्चित करने के लिए एक जांच चलाई जाती है कि मेमोरी को हटाते समय टैग को छोटा नहीं किया गया है।

मेमोरी टैगिंग एक्सटेंशन की तत्परता

एआरएम का मेमोरी टैगिंग एक्सटेंशन (एमटीई) मेमोरी सुरक्षा मुद्दों को दूर करने में मदद करता है। MTE स्टैक, हीप और ग्लोबल्स पर प्रत्येक मेमोरी आवंटन के 56 वें -59 वें पते बिट्स को टैग करके काम करता है। हार्डवेयर और निर्देश सेट स्वचालित रूप से जांचता है कि हर मेमोरी एक्सेस पर सही टैग का उपयोग किया जाता है।

एंड्रॉइड ऐप जो पॉइंटर के शीर्ष बाइट में जानकारी को गलत तरीके से संग्रहीत करते हैं, उन्हें एमटीई-सक्षम डिवाइस पर तोड़ने की गारंटी दी जाती है । टैग किए गए संकेत एमटीई उपकरणों के उपलब्ध होने से पहले सूचक के शीर्ष बाइट के गलत उपयोग का पता लगाना और अस्वीकार करना आसान बनाते हैं।

डेवलपर समर्थन करते हैं

यदि आपका ऐप क्रैश हो गया है और आपको इस लिंक से संकेत दिया गया है, तो इसका मतलब निम्न में से एक हो सकता है:

  1. एप्लिकेशन ने एक पॉइंटर को मुक्त करने का प्रयास किया जो सिस्टम के हीप एलोकेटर द्वारा आवंटित नहीं किया गया था।
  2. आपके एप्लिकेशन में कुछ ने एक पॉइंटर के शीर्ष बाइट को संशोधित किया है। सूचक के शीर्ष बाइट को संशोधित नहीं किया जा सकता है और इस समस्या को ठीक करने के लिए आपके कोड को बदलने की आवश्यकता है।

शीर्ष बाइट पॉइंटर के उदाहरण गलत तरीके से उपयोग या संशोधित किए जा रहे हैं।

  • किसी विशेष प्रकार के पॉइंटर्स में एप्लिकेशन विशिष्ट मेटाडेटा शीर्ष 16 पते बिट्स में संग्रहीत होता है।
  • एक पॉइंटर ने डबल एड्रेस को कास्ट किया और फिर लोअर एड्रेस बिट्स को खो दिया।
  • कोड विभिन्न आकृतियों के स्थानीय चर के पतों के बीच अंतर को मापने के लिए पुनरावृत्ति की गहराई को मापने के तरीके के रूप में गणना करता है।

कुछ एप्लिकेशन पुस्तकालयों पर निर्भर हो सकते हैं जो सूचक के शीर्ष बाइट सेट होने पर गलत व्यवहार करते हैं। हम समझते हैं कि पुस्तकालयों में इन अंतर्निहित समस्याओं को जल्दी से ठीक करना अनौपचारिक हो सकता है। इस प्रकार, ऐसे एप्लिकेशन जो targetSdkLevel < 30 उपयोग करते हैं, उनके पास डिफ़ॉल्ट रूप से पॉइंटर टैगिंग सक्षम नहीं होगी। हम संक्रमणकालीन अवधि को आसान बनाने के लिए targetSdkLevel >= 30 साथ निर्मित अनुप्रयोगों के लिए एक एस्केप हैच भी प्रदान करते हैं।

एस्केप हैच का उपयोग आपके AndroidManifest.xml फ़ाइल में निम्न जोड़कर किया जाता है:

  <application android:allowNativeHeapPointerTagging="false">
  ...
  </application>

यह आपके एप्लिकेशन के लिए पॉइंटर टैगिंग सुविधा को अक्षम कर देगा। कृपया ध्यान दें कि यह अंतर्निहित कोड स्वास्थ्य समस्या को संबोधित नहीं करता है। यह एस्केप हैच एंड्रॉइड के भविष्य के संस्करणों में गायब हो जाएगा, क्योंकि इस प्रकृति के मुद्दे एमटीई के साथ असंगत होंगे।