Glibc 2.31 System Library Release

หลังจากหกเดือนของการพัฒนา การตีพิมพ์ การเปิดตัวไลบรารีระบบ ไลบรารี GNU C (glibc) 2.31ซึ่งเป็นไปตามข้อกำหนดของมาตรฐาน ISO C11 และ POSIX.1-2008 โดยสมบูรณ์ รุ่นใหม่ประกอบด้วยการแก้ไขจากนักพัฒนา 58 ราย

จากที่นำมาใช้ใน Glibc 2.31 การปรับปรุง คุณสามารถทราบ:

  • เพิ่มมาโคร _ISOC2X_SOURCE เพื่อเปิดใช้งานความสามารถที่กำหนดไว้ในร่างมาตรฐาน ISO ในอนาคต ซีทูเอ็กซ์. คุณสมบัติเหล่านี้ยังเปิดใช้งานเมื่อใช้มาโคร _GNU_SOURCE หรือเมื่อสร้างใน gcc ด้วยแฟล็ก “-std=gnu2x”
  • สำหรับฟังก์ชันที่กำหนดไว้ในไฟล์ส่วนหัว "math.h" ที่ปัดเศษผลลัพธ์ให้เป็นประเภทที่เล็กกว่า จะมีการนำเสนอมาโครประเภททั่วไปที่สอดคล้องกันในไฟล์ "tgmath.h" ตามที่กำหนดโดยข้อกำหนดเฉพาะ TS 18661-1:2014 และ TS 18661-3: 2015;
  • เพิ่มฟังก์ชัน pthread_clockjoin_np() ซึ่งจะรอให้เธรดเสร็จสิ้น โดยคำนึงถึงการหมดเวลา (หากการหมดเวลาเกิดขึ้นก่อนที่จะเสร็จสิ้น ฟังก์ชันจะส่งคืนข้อผิดพลาด) ไม่เหมือน pthread_timedjoin_np()ใน pthread_clockjoin_np() เป็นไปได้ที่จะกำหนดประเภทของตัวจับเวลาสำหรับการคำนวณการหมดเวลา - CLOCK_MONOTONIC (คำนึงถึงเวลาที่ระบบใช้ในโหมดสลีป) หรือ CLOCK_REALTIME;
  • ขณะนี้ตัวแก้ไข DNS รองรับตัวเลือก trust-ad ใน /etc/resolv.conf และแฟล็ก RES_TRUSTAD ใน _res.options เมื่อตั้งค่าแล้ว ค่าสถานะ DNSSEC จะถูกส่งไปในคำขอ DNS AD (ข้อมูลที่ได้รับการรับรองความถูกต้อง) ในโหมดนี้ ค่าสถานะ AD ที่กำหนดโดยเซิร์ฟเวอร์จะพร้อมใช้งานสำหรับแอปพลิเคชันที่เรียกใช้ฟังก์ชัน เช่น res_search() ตามค่าเริ่มต้น หากไม่ได้ตั้งค่าตัวเลือกที่แนะนำ glibc จะไม่ระบุค่าสถานะ AD ในคำขอ และล้างค่าสถานะ AD โดยอัตโนมัติในการตอบกลับ ซึ่งบ่งชี้ว่าการตรวจสอบ DNSSEC หายไป
  • การสร้างการเชื่อมโยงการเรียกระบบการทำงานสำหรับ Glibc ไม่จำเป็นต้องติดตั้งไฟล์ส่วนหัวเคอร์เนล Linux อีกต่อไป ข้อยกเว้นคือสถาปัตยกรรม RISC-V 64 บิต
  • ตกรอบแล้ว จุดอ่อน CVE-2019-19126ซึ่งช่วยให้คุณข้ามการป้องกันได้
    ASLR ในโปรแกรมที่มีการตั้งค่าสถานะ setuid และกำหนดเค้าโครงที่อยู่ในไลบรารีที่โหลดผ่านการจัดการตัวแปรสภาพแวดล้อม LD_PREFER_MAP_32BIT_EXEC

การเปลี่ยนแปลงที่ทำลายความเข้ากันได้:

  • Totalorder(), Totalordermag() และฟังก์ชันที่คล้ายกันสำหรับประเภทจุดลอยตัวอื่น ๆ ตอนนี้ยอมรับพอยน์เตอร์เป็นอาร์กิวเมนต์เพื่อกำจัดคำเตือนเกี่ยวกับการแปลงค่าในสถานะ น่านตามคำแนะนำของ TS 18661-1 ที่เสนอสำหรับมาตรฐาน C2X ในอนาคต
    ไฟล์ปฏิบัติการที่มีอยู่ซึ่งส่งผ่านอาร์กิวเมนต์จุดลอยตัวโดยตรงจะยังคงทำงานต่อไปโดยไม่มีการแก้ไข

  • ฟังก์ชัน stime ที่เลิกใช้มานานแล้วจะไม่สามารถใช้งานได้อีกต่อไปสำหรับไบนารีที่เชื่อมโยงกับ glibc และคำจำกัดความได้ถูกลบออกจาก time.h แล้ว หากต้องการตั้งเวลาของระบบ ให้ใช้ฟังก์ชัน clock_settime ในอนาคต เราวางแผนที่จะลบฟังก์ชัน ftime ที่เลิกใช้แล้ว เช่นเดียวกับไฟล์ส่วนหัว sys/timeb.h (ควรใช้ gettimeofday หรือ clock_gettime แทน ftime)
  • ฟังก์ชัน gettimeofday จะไม่ส่งข้อมูลเกี่ยวกับเขตเวลาทั้งระบบอีกต่อไป (คุณลักษณะนี้มีความเกี่ยวข้องในยุคของ 4.2-BSD และเลิกใช้แล้วเป็นเวลาหลายปี) อาร์กิวเมนต์ 'tzp' ควรส่งผ่านตัวชี้ null และควรใช้ฟังก์ชัน localtime() เพื่อรับข้อมูลโซนเวลาตามเวลาปัจจุบัน การเรียก gettimeofday ด้วยอาร์กิวเมนต์ 'tzp' ที่ไม่ใช่ศูนย์จะส่งคืนฟิลด์ tz_ minuteswest และ tz_dsttime ที่ว่างเปล่าในโครงสร้างเขตเวลา ฟังก์ชัน gettimeofday นั้นเลิกใช้แล้วภายใต้ POSIX (แนะนำให้ใช้ clock_gettime แทน gettimeofday) แต่ไม่มีแผนที่จะลบออกจาก glibc
  • settimeofday ไม่รองรับการส่งพารามิเตอร์พร้อมกันสำหรับการตั้งเวลาและออฟเซ็ตการแก้ไขเวลาอีกต่อไป เมื่อเรียก settimeofday อาร์กิวเมนต์ตัวใดตัวหนึ่ง (เวลาหรือออฟเซ็ต) จะต้องตั้งค่าเป็น null มิฉะนั้นการเรียกใช้ฟังก์ชันจะล้มเหลวโดยมีข้อผิดพลาด EINVAL เช่นเดียวกับ gettimeofday ฟังก์ชัน settimeofday เลิกใช้แล้วใน POSIX และแนะนำให้แทนที่ด้วยฟังก์ชัน clock_settime หรือตระกูลฟังก์ชัน adjtime
  • การสนับสนุนสำหรับสถาปัตยกรรม SPARC ISA v7 ถูกยกเลิกแล้ว (การสนับสนุน v8 ยังคงอยู่ในขณะนี้ แต่สำหรับโปรเซสเซอร์ที่รองรับคำสั่ง CAS เท่านั้น เช่น โปรเซสเซอร์ LEON ไม่ใช่โปรเซสเซอร์ SuperSPARC)
  • หากการจับคู่ล้มเหลวใน "สันหลังยาว" โดยที่ตัวเชื่อมโยงไม่ค้นหาสัญลักษณ์ของฟังก์ชันจนกว่าจะมีการเรียกฟังก์ชันนั้นเป็นครั้งแรก ฟังก์ชัน dlopen ในตอนนี้จะบังคับให้กระบวนการยุติ (ก่อนหน้านี้จะคืนค่า NULL เมื่อเกิดความล้มเหลว)
  • สำหรับ MIPS hard-float ABI ตอนนี้มีการใช้สแต็กปฏิบัติการแล้ว เว้นแต่ว่าบิลด์จะจำกัดการใช้เคอร์เนล Linux 4.8+ อย่างชัดเจนผ่านพารามิเตอร์ “-enable-kernel=4.8.0” (ที่มีเคอร์เนลสูงถึง 4.8 การขัดข้องคือ สังเกตได้จากการกำหนดค่า MIPS บางอย่าง)
  • การเชื่อมโยงรอบการเรียกของระบบที่เกี่ยวข้องกับการจัดการเวลาได้ถูกย้ายไปใช้การเรียกของระบบ time64 หากมี (บนระบบ 32 บิต glibc จะพยายามเรียกระบบใหม่ก่อนซึ่งจัดการประเภทเวลา 64 บิต และหากไม่มีเลย ก็จะตกไป กลับไปใช้การโทรแบบ 32 บิตแบบเก่า)

ที่มา: opennet.ru

เพิ่มความคิดเห็น