إصدار مكتبة النظام Glibc 2.35

بعد ستة أشهر من التطوير ، تم نشر إصدار مكتبة GNU C (glibc) 2.35 ، والتي تتوافق تمامًا مع متطلبات معايير ISO C11 و POSIX.1-2017. يتضمن الإصدار الجديد إصلاحات من 66 مطورًا.

من بين التحسينات التي تم تنفيذها في Glibc 2.35:

  • تمت إضافة دعم للغة "C.UTF-8" ، والتي تتضمن عمليات الترتيب لجميع رموز Unicode ، ولكنها تقتصر على استخدام نطاقات ASCII في وظائف fnmatch و regexec و regcomp لتوفير مساحة. تبلغ المساحة المحلية حوالي 400 كيلو بايت ، منها 346 كيلو بايت عبارة عن بيانات Unicode LC_CTYPE ، ويجب تثبيتها بشكل منفصل (غير مضمنة في Glibc).
  • تم تحديث بيانات الترميز ومعلومات نوع الحرف وجداول التحويل الصوتي لدعم مواصفات Unicode 14.0.0.
  • في و يتم تنفيذ الوظائف ووحدات الماكرو التي تقرب النتيجة إلى نوع أضيق: fsqrt و fsqrtl و dsqrtl و ffma و ffmal و dfmal و fMsqrtfN و fMsqrtfNx و fMxsqrtfN و fMxsqrtfNx و fMfmafmN و fMfmafmN و تم وصف الوظائف في المواصفات TS 18661-1: 2014 ، TS 18661-3: 2015 وإضافتها إلى مسودة معيار ISO C2X C المستقبلي.
  • في و نفذت الوظائف ووحدات الماكرو لإيجاد الحد الأدنى والحد الأقصى لأرقام الفاصلة العائمة مع الأنواع float و long double و_FloatN و _FloatNx الموضحة في مواصفات IEEE 754-2019 وإضافتها إلى مسودة معيار ISO C2X C المستقبلي: fmaximum، fmaximum_num، fmaximum_mag، fmaximum_mimum_mag_num.
  • في الثوابت المضافة لأرقام الفاصلة العائمة ذات الدقة المفردة: M_Ef و M_LOG2Ef و M_LOG10Ef و M_LN2f و M_LN10f و M_PIf و M_PI_2f و M_PI_4f و M_1_PIf و M_2_PIf و M_2_SQRTPIf و M_S_QRT2f و M_S_QRT1f و M_S_QRT2f و
  • لوظائف exp10 في ملف الرأس إضافة وحدات ماكرو مقابلة غير مرتبطة بأنواع معينة.
  • في أضاف الماكرو _PRINTF_NAN_LEN_MAX المقترح في مسودة معيار ISO C2X.
  • تمت إضافة محددات التنسيق "٪ b" و "٪ B" إلى دوال عائلة printf لطباعة الأعداد الصحيحة في التمثيل الثنائي.
  • يقوم نظام الارتباط الديناميكي بتنفيذ خوارزمية فرز DSO جديدة تستخدم بحث العمق أولاً (DFS) لمعالجة مشكلات الأداء عند معالجة التبعيات الحلقية. لتحديد خوارزمية فرز DSO ، تم اقتراح المعامل glibc.rtld.dynamic_sort ، والذي يمكن تعيين القيمة "1" للعودة إلى الخوارزمية القديمة.
  • تمت إضافة دعم وظيفة "__memcmpeq" الجديدة إلى ABI ، والتي يتم استخدامها من قبل المترجمين لتحسين استخدام "memcmp" عندما يتم استخدام قيمة الإرجاع لهذه الوظيفة فقط للتحقق من حالة إكمال العملية.
  • تمت إضافة دعم للتسجيل التلقائي للخيوط باستخدام استدعاء نظام rseq (التسلسلات القابلة لإعادة التشغيل) الذي تم توفيره منذ Linux kernel 4.18. يسمح لك استدعاء نظام rseq بتنظيم التنفيذ المستمر لمجموعة من التعليمات التي لا يتم مقاطعتها وتأكيد النتيجة بالتعليمات الأخيرة في المجموعة. بشكل أساسي ، يوفر وسيلة لتنفيذ ذري سريع جدًا للعمليات التي ، إذا تم مقاطعتها بواسطة مؤشر ترابط آخر ، يتم تنظيفها وإعادة المحاولة.
  • تمت إضافة ارتباط رمزي /usr/bin/ld.so.
  • يتم توفير التجميع الافتراضي لجميع الملفات القابلة للتنفيذ للبرامج المضمنة ومجموعة اختبار في وضع PIE (موضع تنفيذي مستقل). لتعطيل هذا السلوك ، يتم توفير خيار "- تعطيل-افتراضي-فطيرة".
  • بالنسبة إلى Linux ، تمت إضافة إعداد glibc.malloc.hugetlb لتبديل تنفيذ malloc لاستخدام استدعاء النظام madvise مع علامة MADV_HUGEPAGE لـ mmap و sbrk ، أو استخدام صفحات الذاكرة الكبيرة مباشرةً عن طريق تحديد علامة MAP_HUGETLB في مكالمات mmap. في الحالة الأولى ، يمكنك تحقيق زيادة في الأداء إذا تم استخدام الصفحات الضخمة الشفافة في وضع madvise ، وفي الحالة الثانية ، يمكنك استخدام الصفحات الكبيرة المحجوزة بواسطة النظام (Huge Pages).
  • تمت إضافة وظيفة _dl_find_object ، والتي يمكن استخدامها لإضافة معلومات حول فك مكدس الاستدعاءات.
  • دعم إضافي لمعمارية OpenRISC (or1k-linux-gnu) في وضع معالجة النقطة العائمة (soft-float). يتطلب المنفذ binutils 2.35 و GCC 11 و Linux 5.4 kernel.
  • تمت إضافة علامة بناء "--with-rtld-early-cflags" لتحديد إشارات تجميع إضافية لاستخدامها عند إنشاء رمز أولي للارتباط الديناميكي.
  • بالنسبة لمنصة Linux ، تمت إضافة وظيفة epoll_pwait2 ، والتي تختلف عن epoll_wait من خلال تحديد مهلة بدقة نانوثانية.
  • تمت إضافة وظيفة posix_spawn_file_actions_addtcsetpgrp_np لتجنب ظروف السباق عند تعيين محطة تحكم لعملية جديدة.
  • بالنسبة للتطبيقات التي تم تجميعها باستخدام Glibc و GCC 12+ ، يتم تنفيذ وضع الحماية "_FORTIFY_SOURCE = 3" ، والذي يكتشف فيضان المخزن المؤقت المحتمل عند تنفيذ وظائف السلسلة المحددة في ملف الرأس string.h. ينخفض ​​الاختلاف من وضع "_FORTIFY_SOURCE = 2" إلى عمليات التحقق الإضافية التي من المحتمل أن تؤدي إلى تدهور الأداء.
  • توقف دعم امتدادات Intel MPX (ملحقات حماية الذاكرة) ، والتي تُستخدم لفحص المؤشرات للتأكد من توافقها مع حدود مناطق الذاكرة (لم يتم استخدام التقنية المحددة على نطاق واسع وتمت إزالتها بالفعل من GCC و LLVM).
  • مهملة وستتم إزالتها في إصدار مستقبلي ، آلية الارتباط المسبق ومتغيرات البيئة المرتبطة بها LD_TRACE_PRELINKING و LD_USE_LOAD_BIAS.

    تم إصلاح نقاط الضعف:

    • CVE-2022-23218، CVE-2022-23219 - تجاوز سعة المخزن المؤقت في الدالتين svcunix_create و clnt_create بسبب نسخ محتويات معلمة اسم الملف إلى المكدس دون التحقق من حجم البيانات المنسوخة. بالنسبة للتطبيقات التي تم إنشاؤها بدون حماية المكدس وباستخدام بروتوكول "unix" ، يمكن أن تؤدي الثغرة الأمنية إلى تنفيذ تعليمات برمجية ضارة عند معالجة أسماء ملفات طويلة جدًا.
    • CVE-2021-3998 هي ثغرة أمنية في دالة realpath () ناتجة عن إرجاع قيمة غير صحيحة في ظل ظروف معينة تحتوي على بيانات متبقية غير نظيفة من المكدس. بالنسبة لبرنامج fusermount SUID-root ، يمكن استخدام الثغرة الأمنية للحصول على معلومات حساسة من ذاكرة العملية ، على سبيل المثال ، للحصول على معلومات حول المؤشرات.
    • CVE-2021-3999 - تجاوز سعة المخزن المؤقت أحادي البايت في دالة getcwd (). سبب المشكلة هو خطأ موجود منذ عام 1995. لاستدعاء تجاوز ، في مساحة اسم نقطة تحميل منفصلة ، يكفي استدعاء chdir () للدليل "/".

    المصدر: opennet.ru

إضافة تعليق