इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

HWAddressSanitizer

हार्डवेयर की मदद से AddressSanitizer (HWASan) एक स्मृति त्रुटि का पता लगाने के लिए इसी तरह उपकरण है AddressSanitizer । HWASAN, आसन की तुलना में बहुत कम रैम का उपयोग करता है, जो इसे पूरे सिस्टम सैनिटाइजेशन के लिए उपयुक्त बनाता है। HWASAN केवल एंड्रॉइड 10 और उच्चतर, और AArch64 हार्डवेयर पर उपलब्ध है। आप ci.android.com ( विस्तृत सेटअप निर्देश ) से समर्थित पिक्सेल उपकरणों में HWASan छवियों को फ्लैश कर सकते हैं।

क्लासिक आसन की तुलना में, HWASAN है:

  • इसी तरह के सीपीयू ओवरहेड (~ 2x)
  • समान कोड आकार ओवरहेड (40 - 50%)
  • बहुत छोटे रैम ओवरहेड (10% - 35%)

HWASAN, आसन के बग के समान सेट का पता लगाता है:

  • स्टैक और हीप बफर ओवरफ्लो / अंडरफ्लो
  • मुफ्त के बाद ढेर का उपयोग करें
  • बाहर के दायरे का उपयोग करना
  • डबल फ्री / वाइल्ड फ्री

इसके अतिरिक्त, HWASAN रिटर्न के बाद स्टैक उपयोग का पता लगाता है।

कार्यान्वयन विवरण और सीमाएँ

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

आप क्लैंग प्रलेखन साइट पर एचडब्ल्यूएएसएएन के डिजाइन के बारे में अधिक पढ़ सकते हैं।

डिजाईन के अनुसार, HWASAN के पास ओवरफ्लो का पता लगाने के लिए आसन के सीमित आकार के रेडजोन या मुफ्त के बाद उपयोग का पता लगाने के लिए आसन की सीमित क्षमता वाले संगरोध का पता नहीं है। इस कारण से, एचडब्ल्यूएएसएएन बग का पता लगा सकता है, भले ही अतिप्रवाह कितना बड़ा हो या कितनी देर पहले मेमोरी को हटा दिया गया था। यह HWASan को आसन पर एक बड़ा लाभ देता है।

हालांकि, एचडब्ल्यूएएसएएन के पास सीमित टैग मान (256) हैं, जिसका अर्थ है कि कार्यक्रम के एक निष्पादन के दौरान किसी भी बग को लापता होने की 0.4% संभावना है।

आवश्यकताओं को

HWASAN को सिस्टम कॉल तर्कों में टैग किए गए संकेत को स्वीकार करने के लिए लिनक्स कर्नेल की आवश्यकता होती है। इसके लिए समर्थन निम्नलिखित अपस्ट्रीम पैचसेट में लागू किया गया था:

ये पैच एंड्रॉइड-4.14 और उच्च शाखाओं में आम एंड्रॉइड कर्नेल में बैकपोर्ट के रूप में उपलब्ध हैं, लेकिन एंड्रॉइड 10-विशिष्ट शाखाओं जैसे कि एंड्रॉइड-4.14-क्यू में नहीं

HWASan के लिए यूज़रस्पेस सपोर्ट एंड्रॉइड 11 के साथ उपलब्ध है।

यदि आप एक कस्टम टूलकिन के साथ निर्माण कर रहे हैं, तो सुनिश्चित करें कि इसमें LLVM प्रतिबद्ध c336557f तक सब कुछ शामिल है।

HWASAN का उपयोग करना

HWASAN का उपयोग करके पूरे प्लेटफ़ॉर्म का निर्माण करने के लिए निम्न आदेशों का उपयोग करें:

lunch aosp_walleye-userdebug # (or any other product)
export SANITIZE_TARGET=hwaddress
m -j

सुविधा के लिए, यदि आप एक उत्पाद परिभाषा के समान करने के लिए SANITIZE_TARGET सेटिंग में जोड़ सकते हैं aosp_coral_hwasan

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

किसी मॉड्यूल के sanitize: { hwaddress: false } को छोड़ने के लिए, LOCAL_NOSANITIZE := hwaddress या sanitize: { hwaddress: false }

अलग-अलग मॉड्यूल्स को HWASan के साथ पवित्रा किया जा सकता है, साथ ही यह भी कहा जाता है कि libc भी HWASan-ified है। यह संबंधित Android.bp मॉड्यूल परिभाषा में sanitize: { hwaddress: true } को जोड़कर किया जा सकता है। जब एक का उपयोग कर पूरे Android मंच HWASan साथ बनाया गया है _hwasan -suffixed निर्माण (सहित libc ), और के रूप में ऐसी मैन्युअल sanitizing libc HWASan बनाता है के लिए आवश्यक नहीं है।

बेहतर स्टैक के निशान

एचडब्ल्यूएएसएएन कार्यक्रम में हर मेमोरी आवंटन और डील्लोकेशन इवेंट के लिए स्टैक ट्रेस रिकॉर्ड करने के लिए एक तेज, फ्रेम-पॉइंटर-आधारित अनइंडर का उपयोग करता है। Android डिफ़ॉल्ट रूप से AArch64 कोड में फ़्रेम पॉइंटर्स को सक्षम करता है, इसलिए यह व्यवहार में बहुत अच्छा काम करता है। यदि आपको प्रबंधित कोड के माध्यम से खोलना है, तो प्रक्रिया वातावरण में HWASAN_OPTIONS=fast_unwind_on_malloc=0 सेट करें। ध्यान दें कि खराब मेमोरी एक्सेस स्टैक निशान डिफ़ॉल्ट रूप से "स्लो" अनइन्डर का उपयोग करते हैं; यह सेटिंग केवल आवंटन और डील-डौल के निशान को प्रभावित करती है। यह विकल्प लोड के आधार पर बहुत सीपीयू-गहन हो सकता है।

प्रतीकीकरण

आसन प्रलेखन में प्रतीक देखें।

क्षुधा में HWASAN

AddressSanitizer के समान, HWASAN जावा कोड में नहीं देख सकता है, लेकिन यह JNI पुस्तकालयों में बग का पता लगा सकता है। आसन के विपरीत, गैर-एचबीएएसएएन डिवाइस पर एचडब्ल्यूएएसएएन ऐप चलाना समर्थित नहीं है

HWASAN डिवाइस पर, SANITIZE_TARGET के साथ अपने कोड का निर्माण करके HWASan के साथ ऐप्स को चेक किया जा सकता है SANITIZE_TARGET:=hwaddress में SANITIZE_TARGET:=hwaddress , या कंपाइलर झंडे में -fsanitize=hwaddress । अधिक विवरण के लिए ऐप डेवलपर दस्तावेज़ देखें।