Chromium Chronicle #8: GWP-ASan: Vahşi doğadaki hataları tespit edin

8. Bölüm: Vlad Tsyrklevich, Seattle, WA'da (Kasım 2019)
Önceki bölümler

Boşaltma sonrasında kullanım veya arabellek taşması gibi bellek güvenliği hatalarının ayıklanması zor olabilir. AddressSanitizer (ASan) gibi araçlar, birim testlerindeki ve fuzzer'lardaki bellek hatalarının tespit edilmesine yardımcı olur. Ancak birçok hata, yalnızca ASan'ın ek yükünün aşırı yüksek olduğu kullanıcılara dağıtımdan sonra kendini gösterir.

GWP-ASan, doğal ortamlarda kullanılmak üzere tasarlanmış, yalnızca yığın içeren bir bellek hatası algılayıcıdır. Boşaltma sonrası kullanım, arabellek taşması/alt akışlar ve iki kez serbest kalma durumlarını tespit eder. ASan'ın aksine yığındaki veya genel hataları algılamaz.

Ayırmaların küçük bir yüzdesini örnekleyerek GWP-ASan, ihmal edilebilir bellek ve performans ek yüküyle olası hata algılaması sağlayabilmektedir. Örneklenmiş ayırmada GWP-ASan bir bellek hatası oluştuğunda işlemin hemen kilitlenmesine neden olur. Bu şekilde, daha sonra bozuk bellek kullanıldığı zaman değil, tam olarak hata oluştuğunda hata oluştuğunda hatanın tespit edilmesi daha kolay olur.

ASan gibi GWP-ASan kilitlenme raporları da bellek sorunlarını ayıklamaya yardımcı olmak için ayırma ve anlaşma konumu yığın izlemeleri içerir. Kilitlenme kullanıcı arayüzünde sunulan ek verilerden bazılarının bir örneğini (crbug/956230) inceleyelim:

Hem kullanım hem de anlaşma konumu PDFiumEngine::ExtendSelection() kaynaklıdır. Kaynak, hatanın geçersiz hale getirilmiş bir std::vector tekrarlayıcının kullanımı olduğunu hemen gösteriyor.

Windows ve macOS'te malloc/new ve PartitionAlloc kullanılarak yapılan ayırmalar için mevcut ürün kanalında GWP-ASan etkinleştirilir. Android desteği devam ediyor. Şu ana kadar 60'tan fazla GWP-ASan hatası bildirildi ve bunların yaklaşık %70'i düzeltildi. GWP-ASan kilitlenmelerinin tümü, istismar edilebilecek aday güvenlik sorunlarıdır. Bu nedenle, lütfen bunların önceliklerini belirleyin ve gerektiğinde geri bağlantı isteğinde bulunun.