Chromium Chronicle #8: GWP-ASan: شناسایی اشکالات در طبیعت

قسمت 8: توسط Vlad Tsyrklevich در سیاتل، WA (نوامبر، 2019)
قسمت های قبلی

اشکال زدایی خطاهای ایمنی حافظه، مانند استفاده پس از آزاد شدن یا سرریز شدن بافر، می تواند دشوار باشد. ابزارهایی مانند AddressSanitizer (ASan) برای مشخص کردن خطاهای حافظه در تست‌های واحد و فازرها مفید هستند، اما بسیاری از باگ‌ها تنها پس از استقرار برای کاربرانی که سربار ASan به شدت زیاد است ظاهر می‌شوند.

GWP-ASan یک آشکارساز خطای حافظه فقط پشته ای است که برای استفاده در طبیعت طراحی شده است. استفاده پس از آزاد شدن، سرریز/سرریز بافر و آزاد شدن دو برابر را تشخیص می‌دهد. برخلاف ASan، خطاها را در پشته یا جهانی ها تشخیص نمی دهد.

با نمونه‌برداری از درصد کمی از تخصیص‌ها، GWP-ASan می‌تواند تشخیص خطای احتمالی را با سربار حافظه و عملکرد ناچیز ارائه دهد. GWP-ASan هنگامی که یک خطای حافظه با یک تخصیص نمونه رخ می دهد، بلافاصله باعث از کار افتادن فرآیند می شود . این کار تشخیص اشکال را آسان‌تر می‌کند، زیرا خرابی درست در جایی رخ می‌دهد که خطا رخ می‌دهد، به‌جای اینکه در زمان دیگری که حافظه خراب استفاده می‌شود.

مانند ASan، گزارش‌های خرابی GWP-ASan شامل ردیابی پشته تخصیص و توزیع برای کمک به اشکال‌زدایی مشکلات حافظه است. بیایید به یک مثال ( crbug/956230 ) از برخی از داده های اضافی ارائه شده در رابط کاربری خراب نگاهی بیندازیم:

استفاده و توزیع هر دو از PDFiumEngine::ExtendSelection() منشا می گیرند. منبع به سرعت نشان می دهد که این اشکال از یک std::vector iterator نامعتبر استفاده می کند.

GWP-ASan در کانال پایدار برای تخصیص های انجام شده با استفاده از malloc / new و PartitionAlloc در ویندوز و macOS فعال است . پشتیبانی اندروید در حال انجام است. بیش از 60 باگ GWP-ASan تاکنون گزارش شده است و حدود 70 درصد آن برطرف شده است. خرابی‌های GWP-ASan همگی مسائل امنیتی نامزدی هستند که ممکن است قابل بهره‌برداری باشند، بنابراین لطفاً آنها را به سرعت تریاژ کنید و در صورت لزوم، پورت‌های پشتیبان را درخواست کنید.