หลังจากหกเดือนของการพัฒนา ประกาศเปิดตัว Glibc 2.35 เวอร์ชันใหม่แล้ว ซึ่งใน รวมการแก้ไขจากนักพัฒนา 66 คน และจากการปรับปรุงที่นำไปใช้ เราพบว่ามีการเพิ่มการรองรับภาษา "C.UTF-8" ซึ่งรวมถึงการเปรียบเทียบสำหรับรหัส Unicode ทั้งหมด แต่จำกัดเฉพาะการใช้ช่วง ASCII ในฟังก์ชัน fnmatch, regexec และ regcomp เพื่อบันทึก ช่องว่าง.
โลแคลมีขนาดประมาณ 400 KB โดยที่ 346 KB เป็นข้อมูล LC_CTYPE สำหรับ Unicode และต้องติดตั้งแยกต่างหาก (ไม่ได้สร้างไว้ใน Glibc) ข้อมูลการเข้ารหัส ข้อมูลประเภทอักขระ และตารางการทับศัพท์ได้รับการอัปเดตเพื่อรองรับข้อกำหนด Unicode 14.0.0
การเปลี่ยนแปลงที่โดดเด่นอีกประการหนึ่งก็คือ Y ใช้ฟังก์ชันและมาโครที่ปัดเศษผลลัพธ์เป็นประเภทที่แคบลง นอกเหนือจากการใช้ฟังก์ชันและมาโครเพื่อค้นหาจำนวนจุดทศนิยมต่ำสุดและสูงสุดของประเภท float, long double, _FloatN และ _FloatNx ที่อธิบายไว้ในข้อกำหนด IEEE 754-2019
สำหรับฟังก์ชั่น exp10 เพิ่มมาโครที่เกี่ยวข้องลงในไฟล์ส่วนหัวซึ่งไม่ได้ผูกกับประเภทใดประเภทหนึ่ง รวมทั้งมีการเพิ่มมาโคร _PRINTF_NAN_LEN_MAX ลงใน เสนอในร่างมาตรฐาน ISO C2X
ระบบเชื่อมโยงแบบไดนามิกใช้อัลกอริธึมการจำแนกประเภทใหม่ DSO โดยใช้การค้นหาเชิงลึก (DFS) เพื่อแก้ไขปัญหาด้านประสิทธิภาพเมื่อจัดการกับการขึ้นต่อกันแบบวนซ้ำ ในการเลือกอัลกอริธึมการจัดเรียง DSO จะมีการเสนอพารามิเตอร์ glibc.rtld.dynamic_sort ซึ่งสามารถตั้งค่าเป็น "1" เพื่อถอยกลับไปยังอัลกอริธึมก่อนหน้า
นอกจากนั้นแล้ว เพิ่มการรองรับฟังก์ชั่นใหม่ '__memcmpeq' ไปยัง ABI ซึ่งใช้โดยคอมไพเลอร์เพื่อเพิ่มประสิทธิภาพการใช้ 'memcmp' เมื่อใช้ค่าส่งคืนของฟังก์ชันนี้เพื่อตรวจสอบสถานะความสมบูรณ์ของการดำเนินการเท่านั้น
ดิ รองรับการลงทะเบียนเธรดอัตโนมัติ โดยใช้การเรียกระบบ rseq (ลำดับที่รีสตาร์ทได้) ที่ให้ไว้ตั้งแต่เคอร์เนล Linux 4.18 การเรียกระบบ rseq ช่วยในการจัดระเบียบการดำเนินการของกลุ่มคำสั่งอย่างต่อเนื่อง ซึ่งไม่ถูกขัดจังหวะและส่งผลกับคำสั่งสุดท้ายในกลุ่ม โดยพื้นฐานแล้ว มันอำนวยความสะดวกสำหรับการดำเนินการปรมาณูอย่างรวดเร็ว ซึ่งหากถูกขัดจังหวะโดยเธรดอื่น จะถูกล้างและลองใหม่
ในทางกลับกัน ให้ การรวบรวมเริ่มต้นของไฟล์ปฏิบัติการทั้งหมด ของโปรแกรมในตัวและชุดทดสอบในโหมด PIE (ปฏิบัติการที่ไม่ขึ้นกับตำแหน่ง)
หากต้องการปิดใช้งานพฤติกรรมนี้ มีตัวเลือก “–disable-default-pie” ให้ไว้บวกสำหรับ Linux เพิ่มการตั้งค่า glibc.malloc.hugetlb เพื่อเปลี่ยนการใช้งาน malloc เพื่อใช้การเรียกระบบ madvise ด้วยแฟล็ก MADV_HUGEPAGE สำหรับ mmap และ sbrk หรือใช้หน้าหน่วยความจำขนาดใหญ่โดยตรงโดยระบุแฟล็ก MAP_HUGETLB ในการเรียก mmap
ในกรณีแรก สามารถเพิ่มประสิทธิภาพได้โดยใช้ Huge Pages แบบโปร่งใสในโหมด madvise และในกรณีที่สอง คุณสามารถใช้เพจขนาดใหญ่ที่สงวนไว้โดยระบบ (Huge Pages)
นอกจากนี้ ควรสังเกตด้วยว่าช่องโหว่บางอย่างได้รับการแก้ไขในเวอร์ชันใหม่นี้:
- CVE-2022-23218, CVE-2022-23219: บัฟเฟอร์ล้นในฟังก์ชัน svcunix_create และ clnt_create ที่เกิดจากการคัดลอกเนื้อหาของพารามิเตอร์ชื่อไฟล์ลงในสแต็กโดยไม่ตรวจสอบขนาดของข้อมูลที่คัดลอก สำหรับแอปพลิเคชันที่สร้างขึ้นโดยไม่มีการป้องกันสแตกและใช้โปรโตคอล "unix" ช่องโหว่นี้อาจนำไปสู่การเรียกใช้โค้ดที่เป็นอันตรายเมื่อประมวลผลชื่อไฟล์ที่ยาวมาก
- CVE-2021-3998: ช่องโหว่ในฟังก์ชัน realpath() ที่เกิดจากการคืนค่าที่ไม่ถูกต้องภายใต้เงื่อนไขบางประการที่มีข้อมูลตกค้างที่ไม่สะอาดจากสแต็ก สำหรับโปรแกรม SUID-root fusermount ช่องโหว่สามารถใช้เพื่อรับข้อมูลที่ละเอียดอ่อนจากหน่วยความจำของกระบวนการ เช่น เพื่อรับข้อมูลตัวชี้
- CVE-2021-3999: บัฟเฟอร์ล้นไบต์เดียวในฟังก์ชัน getcwd() ปัญหาเกิดจากบั๊กที่มีมาตั้งแต่ปี 1995 หากต้องการเรียกโอเวอร์โฟลว์ ในเนมสเปซจุดต่อเชื่อมที่แยกต่างหาก ให้เรียก chdir() ในไดเร็กทอรี "/"
ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติม คุณสามารถตรวจสอบรายละเอียดในไฟล์ ลิงค์ต่อไปนี้