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

بعد ستة أشهر من التطوير نشرت إصدار مكتبة النظام مكتبة جنو سي (جليبك) 2.31، والتي تتوافق تمامًا مع متطلبات ISO C11 و POSIX.1-2008. يتضمن الإصدار الجديد إصلاحات من 58 مطورًا.

تم التنفيذ في Glibc 2.31 تحسينات يمكنك ملاحظة:

  • تمت إضافة ماكرو _ISOC2X_SOURCE لتمكين الإمكانات المحددة في مسودة معيار ISO المستقبلي C2X. يتم تمكين هذه الميزات أيضًا عند استخدام الماكرو _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 الآن خيار الإعلان الموثوق في /etc/resolv.conf وعلامة RES_TRUSTAD في _res.options، عند التعيين، يتم إرسال علامة DNSSEC في طلبات DNS AD (بيانات موثقة). في هذا الوضع، تصبح علامة AD التي تم تعيينها بواسطة الخادم متاحة للتطبيقات التي تستدعي وظائف مثل res_search(). افتراضيًا، إذا لم يتم تعيين الخيارات المقترحة، فلن يحدد glibc علامة AD في الطلبات ويقوم بمسحها تلقائيًا في الاستجابات، مما يشير إلى أن عمليات فحص DNSSEC مفقودة؛
  • لم يعد إنشاء روابط استدعاء نظام العمل لـ Glibc يتطلب تثبيت ملفات رأس Linux kernel. الاستثناء هو بنية RISC-V 64 بت؛
  • مستبعد عالي التأثر CVE-2019-19126، والذي يسمح لك بتجاوز الحماية
    ASLR في البرامج التي تحتوي على علامة setuid وتحديد تخطيط العنوان في المكتبات المحملة من خلال معالجة متغير البيئة LD_PREFER_MAP_32BIT_EXEC.

التغييرات التي تؤدي إلى كسر التوافق:

  • Totalorder() وtalordermag() والوظائف المشابهة لأنواع الفاصلة العائمة الأخرى تقبل الآن المؤشرات كوسائط لإزالة التحذيرات بشأن تحويل القيم في الحالة نان، وفقًا لتوصيات TS 18661-1 المقترحة لمعيار C2X المستقبلي.
    سوف يستمر تشغيل الملفات التنفيذية الموجودة التي تمرر وسيطات الفاصلة العائمة مباشرة دون تعديل؛

  • لم تعد وظيفة stime التي تم إهمالها منذ فترة طويلة متاحة للثنائيات المرتبطة بـ glibc، وتمت إزالة تعريفها من time.h. لتعيين وقت النظام، استخدم وظيفة Clock_settime. في المستقبل، نخطط لإزالة وظيفة ftime المهملة، بالإضافة إلى ملف الرأس sys/timeb.h (يجب استخدام gettimeofday أو Clock_gettime بدلاً من ftime)؛
  • لم تعد وظيفة gettimeofday تمرر معلومات حول المنطقة الزمنية على مستوى النظام (كانت هذه الميزة ذات صلة في أيام 4.2-BSD وتم إهمالها لسنوات عديدة). يجب الآن تمرير الوسيطة 'tzp' كمؤشر فارغ، ويجب استخدام الدالة localtime() للحصول على معلومات المنطقة الزمنية بناءً على الوقت الحالي. سيؤدي استدعاء gettimeofday باستخدام وسيطة "tzp" غير صفرية إلى إرجاع حقول tz_Minuteswest وtz_dsttime الفارغة في بنية المنطقة الزمنية. تم إهمال وظيفة gettimeofday نفسها ضمن POSIX (يوصى باستخدام Clock_gettime بدلاً من gettimeofday)، ولكن لا توجد خطط لإزالتها من glibc؛
  • لم يعد settimeofday يدعم التمرير المتزامن لمعلمات ضبط الوقت وإزاحة تصحيح الوقت. عند استدعاء settimeofday، يجب الآن تعيين إحدى الوسيطات (الوقت أو الإزاحة) على قيمة خالية، وإلا فسيفشل استدعاء الوظيفة مع وجود خطأ EINVAL. مثل gettimeofday، تم إهمال وظيفة settimeofday في POSIX ويوصى باستبدالها بوظيفة Clock_settime أو عائلة وظائف adjtime؛
  • تم إيقاف دعم بنية SPARC ISA v7 (تم الاحتفاظ بدعم الإصدار 8 في الوقت الحالي، ولكن فقط للمعالجات التي تدعم تعليمات CAS، مثل معالجات LEON، وليس معالجات SuperSPARC).
  • إذا فشل الاقتران في "كسول"، حيث لا يبحث الرابط عن رموز دالة حتى الاستدعاء الأول لتلك الوظيفة، فإن دالة dlopen الآن تجبر العملية على الإنهاء (سابقًا إرجاع NULL عند الفشل)؛
  • بالنسبة لـ MIPS hard-float ABI، يتم الآن استخدام المكدس القابل للتنفيذ، ما لم يقيد البناء بشكل صريح استخدام Linux kernel 4.8+ عبر المعلمة "-enable-kernel=4.8.0" (مع نواة تصل إلى 4.8، تكون الأعطال لوحظ بالنسبة لبعض تكوينات MIPS)؛
  • تم نقل الارتباطات حول استدعاءات النظام المتعلقة بمعالجة الوقت لاستخدام استدعاء نظام time64، إذا كان موجودًا (في أنظمة 32 بت، يحاول glibc أولاً استدعاءات النظام الجديدة التي تعالج نوع الوقت 64 بت، وإذا لم يكن هناك أي شيء، يسقط العودة إلى المكالمات القديمة 32 بت).

المصدر: opennet.ru

إضافة تعليق