The Chromium Chronicle #8: GWP-ASan: जंगल में गड़बड़ियों का पता लगाएं

आठवां एपिसोड: सिएटल, वॉशिंगटन में व्लाद त्सीर्कलेविच का गाना (नवंबर, 2019)
पिछले एपिसोड

'इस्तेमाल के बाद फ़्री' या बफ़र ओवरफ़्लो जैसी मेमोरी की सुरक्षा से जुड़ी गड़बड़ियों को डीबग करना मुश्किल हो सकता है. AddressSanitizer (ASan) जैसे टूल, यूनिट टेस्ट और फ़ज़र्स में, मेमोरी से जुड़ी गड़बड़ियों का पता लगाने में मदद करते हैं. हालांकि, कई बग सिर्फ़ उन उपयोगकर्ताओं के लिए डिप्लॉय किए जाने के बाद ही दिखते हैं जहां ASan की ओवरहेडिंग काफ़ी ज़्यादा हो जाती है.

GWP-ASan, सिर्फ़ हीप-ओनली मेमोरी की गड़बड़ी का पता लगाने वाला टूल है. इसे जंगल में इस्तेमाल करने के लिए डिज़ाइन किया गया है. यह इस्तेमाल-आफ़्टर-फ़्रीज़, बफ़र ओवरफ़्लो/अंडरफ़्लो, और डबल फ़्रीज़ का पता लगाता है. ASan के उलट, यह स्टैक या ग्लोबल में गड़बड़ियों का पता नहीं लगाता है.

GWP-ASan से की जाने वाली जानकारी के कुछ प्रतिशत का सैंपल लेकर, यह संभावित गड़बड़ियों का पता लगाने में मदद करता है. हालांकि, इसमें मेमोरी और परफ़ॉर्मेंस का काफ़ी कम समय लगता है. सैंपल के तौर पर दिए गए ऐलोकेशन के साथ मेमोरी की गड़बड़ी होने पर, GWP-ASan की वजह से, प्रोसेस तुरंत बंद हो जाएगी. इससे गड़बड़ी का पता लगाना आसान हो जाता है, क्योंकि क्रैश ठीक उसी जगह पर होता है जहां गड़बड़ी होती है. इसके बजाय, खराब मेमोरी का इस्तेमाल होने पर गड़बड़ी नहीं होती.

ASan की तरह, GWP-ASan की क्रैश रिपोर्ट में, ऐलोकेशन और डीललोकेशन स्टैक ट्रेस शामिल होते हैं. इससे मेमोरी से जुड़ी समस्याओं को डीबग करने में मदद मिलती है. चलिए, क्रैश यूज़र इंटरफ़ेस (यूआई) में दिखाए गए कुछ अतिरिक्त डेटा (crbug/956230) का उदाहरण देखते हैं:

इस्तेमाल और डीललोकेशन, दोनों की शुरुआत PDFiumEngine::ExtendSelection() से हुई है. सोर्स तुरंत यह दिखाता है कि गड़बड़ी, किसी अमान्य std::vector इटरेटर का इस्तेमाल करके की गई है.

Windows और macOS पर malloc/new और PartitionAlloc का इस्तेमाल करके किए गए आवंटन के लिए, GWP-ASan को स्टेबल चैनल पर चालू किया गया है. Android सहायता जारी है. अब तक 60 से ज़्यादा GWP-ASan की गड़बड़ियां रिपोर्ट की जा चुकी हैं और करीब 70% गड़बड़ी को ठीक कर दिया गया है. GWP-ASan के क्रैश, कैंडिडेट के तौर पर होने वाली सुरक्षा से जुड़ी ऐसी सभी समस्याएं हैं जिनका हम फ़ायदा उठा सकते हैं. इसलिए, इन्हें जल्दी से ठीक करें और ज़रूरत पड़ने पर बैकपोर्ट का अनुरोध करें.