Chromium Chronicle #8:GWP-ASan:偵測野外的錯誤

第 8 集:華盛頓州西雅圖的 Vlad Tsyrklevich (2019 年 11 月)
前幾集

對記憶體安全錯誤偵錯 (例如「使用已釋放記憶體」或「緩衝區溢位」等) 可能並不容易。如 AddressSanitizer (ASan) 這類工具有助於精準找出單元測試和模糊工具中的記憶體錯誤,但許多錯誤只會在 ASan 負載過高的使用者部署後,才會出現在使用者身上。

GWP-ASan 是純堆積記憶體錯誤偵測工具,專為野外設計。這項功能會偵測釋放後使用、緩衝區溢位/反向溢位現象,以及雙倍釋放。與 ASan 不同,它不會偵測堆疊或全域中的錯誤。

GWP-ASan 對少量配置進行取樣,因此能在可忽略的記憶體和效能負擔下,提供機率錯誤偵測功能。 在使用取樣的配置作業發生記憶體錯誤時,GWP-ASan 會導致程序立即停止運作。如此一來,由於當機發生在錯誤發生時,而不是稍後使用損毀記憶體時,就更容易找出錯誤。

與 ASan 一樣,GWP-ASan 當機報告包含配置和取消配置堆疊追蹤,協助對記憶體問題進行偵錯。以下舉例說明當機 UI 中顯示的某些其他資料 (crbug/956230):

使用和交易位置都來自 PDFiumEngine::ExtendSelection()。 來源快速顯示錯誤是使用無效的 std::vector 疊代器。

在 Windows 和 macOS 上使用 malloc/newPartitionAlloc 進行配置時,穩定版已啟用 GWP-ASan。Android 支援功能開發中。目前已回報超過 60 個 GWP-ASan 錯誤,修正了約 70%。GWP-ASan 當機問題是所有可能遭惡意運用的潛在安全性問題,因此請迅速將這些問題分類,並在必要時要求向後移植。