ในส่วนแกนกลาง Linuxเริ่มตั้งแต่เวอร์ชัน 5.2 เป็นต้นไป ข้อผิดพลาดที่ทำให้เนื้อหาของการลงทะเบียน AVX ถูกละเมิดเมื่อส่งคืนจากตัวจัดการสัญญาณที่ได้รับการจัดการเมื่อมีการส่งข้อยกเว้น (page-fault) ปัญหาเกิดขึ้นเมื่อรันโปรแกรมแบบมัลติเธรด ("-pthread") ที่เกี่ยวข้องกับการคำนวณด้วยการลงทะเบียน AVX หากเคอร์เนลถูกสร้างขึ้นใน GCC 9 (หากสร้างใน GCC รุ่นก่อนหน้า ข้อผิดพลาดจะไม่ปรากฏขึ้น เนื่องจากแคช GCC 9 ที่อยู่ของตัวแปร thread-local ในรีจิสเตอร์ และ GCC เวอร์ชันก่อนหน้าจะโหลดทุกครั้ง)
ปัญหาทำให้โปรแกรมยุติการทำงานก่อนเวลาอันควรโดยมีข้อผิดพลาดเกี่ยวกับความเสียหายของหน่วยความจำ การแสดงข้อผิดพลาดที่เห็นได้ชัดเจนที่สุดและสังเกตได้บ่อยที่สุด เขียนด้วยภาษาโก เนื่องจากปัญหาที่ระบุไว้ โปรแกรม Go จะยุติการทำงานก่อนกำหนด โดยปกติจะมีข้อผิดพลาด “ข้อผิดพลาดรันไทม์: ที่อยู่หน่วยความจำไม่ถูกต้องหรือข้อผิดพลาดไม่มีตัวชี้”, “รันไทม์: คืนพีซีที่ไม่คาดคิด” และ “การละเมิดการแบ่งส่วน” จุดบกพร่องในเคอร์เนลยังคงไม่ได้รับการแก้ไขในขณะนี้ เพิ่มการเปลี่ยนแปลงลงในรันไทม์ของภาษา Go เพื่อแก้ไขข้อบกพร่องในเคอร์เนลที่มีปัญหาอย่างเลือกสรร Linuxโดยมีค่าใช้จ่ายส่วนเกินเพิ่มเติม
ที่มา: opennet.ru
