ตอนที่ 8: โดย Vlad Tsyrklevich ในซีแอตเทิล รัฐวอชิงตัน (พฤศจิกายน 2019)
ตอนก่อนหน้า
การแก้ไขข้อผิดพลาดด้านความปลอดภัยของหน่วยความจำ เช่น การใช้งานหลังช่วงใช้ฟรี (Use After Free) หรือบัฟเฟอร์ล้น (Buffer Overflow) อาจเป็นเรื่องยาก เครื่องมืออย่าง AddressSanitizer (ASan) มีประโยชน์ในการระบุ ข้อผิดพลาดของหน่วยความจําในการทดสอบหน่วยและ fuzzer แต่ข้อบกพร่องจำนวนมากเกิดขึ้นหลังจากการทำให้ใช้งานได้สำหรับผู้ใช้ซึ่งมีค่าใช้จ่ายในการดำเนินงานของ ASan สูงเกินกว่าที่กำหนด
GWP-ASan เป็นเครื่องมือตรวจจับข้อผิดพลาดของหน่วยความจําแบบฮีปเท่านั้น ซึ่งออกแบบมาเพื่อใช้งานในธรรมชาติ โดยจะตรวจจับการใช้งานหลังช่วงใช้ฟรี บัฟเฟอร์ล้น/ส่วนไหลน้อยเกินไป และปล่อย 2 ชั้น แต่จะไม่ตรวจหาข้อผิดพลาดในสแต็กหรือใน globals ซึ่งต่างจาก ASan
การสุ่มตัวอย่างการจัดสรรเพียงไม่กี่เปอร์เซ็นต์ทำให้ GWP-ASan สามารถตรวจหาข้อผิดพลาดเกี่ยวกับความน่าจะเป็นที่มีหน่วยความจำและค่าใช้จ่ายในประสิทธิภาพไม่เพียงพอ GWP-ASan จะทำให้กระบวนการขัดข้องทันทีเมื่อเกิดข้อผิดพลาดเกี่ยวกับหน่วยความจำกับการจัดสรรที่สุ่มตัวอย่าง ซึ่งช่วยให้เห็นข้อบกพร่องได้ง่ายขึ้น เนื่องจากการขัดข้องเกิดขึ้นในที่ที่เกิดข้อผิดพลาดแทนในภายหลังเมื่อใช้หน่วยความจำที่เสียหาย
รายงานข้อขัดข้องของ GWP-ASan จะมีการติดตามสแต็กการจัดสรรและดีลตำแหน่งเช่นเดียวกับ ASan เพื่อช่วยแก้ไขข้อบกพร่องของปัญหาด้านหน่วยความจำ ลองดูตัวอย่าง (crbug/956230) ของข้อมูลเพิ่มเติมบางส่วนที่แสดงใน UI ของข้อขัดข้อง
ทั้งการใช้และ Deallocation จะเริ่มมาจาก PDFiumEngine::ExtendSelection()
แหล่งที่มาแสดงข้อบกพร่องอย่างรวดเร็วคือการใช้ตัววนซ้ำ std::vector
ที่ใช้งานไม่ได้
มีการเปิดใช้ GWP-ASan ในเวอร์ชันเสถียรสำหรับการจัดสรรที่ใช้ malloc
/new
และ PartitionAlloc
ใน Windows และ macOS Android กำลังให้การสนับสนุน ที่ผ่านมามีการรายงานข้อบกพร่องของ GWP-ASan กว่า 60 รายการและได้รับการแก้ไขแล้วประมาณ 70% ข้อขัดข้องของ GWP-ASan เป็นปัญหาด้านความปลอดภัยทั้งหมดของผู้รอการพิจารณาที่อาจแสวงหาประโยชน์ได้ ดังนั้นโปรดตรวจสอบข้อขัดข้องดังกล่าวอย่างรวดเร็วและขอ Backport (เมื่อจำเป็น)