بعد ستة أشهر من التطوير ، تم نشر إصدار مكتبة GNU C (glibc) 2.34 ، والتي تتوافق تمامًا مع متطلبات معايير ISO C11 و POSIX.1-2017. يتضمن الإصدار الجديد إصلاحات من 66 مطورًا.
من بين التحسينات التي تم تنفيذها في Glibc 2.34:
- تم دمج مكتبات libpthread وlibdl وlibutil وlibanl في بنية libc الرئيسية، ولم يعد استخدام وظائفها في التطبيقات يتطلب الارتباط باستخدام أعلام -lpthread و-ldl و-lutil و-lanl. تم إجراء الاستعدادات لدمج libresolv في libc. سيسمح التكامل بعملية تحديث glibc أكثر سلاسة وسيعمل على تبسيط تنفيذ وقت التشغيل. يتم توفير مكتبات Stub لتوفير التوافق مع الإصدارات السابقة مع التطبيقات المبنية باستخدام الإصدارات الأقدم من glibc. بسبب التوسع في عدد الهياكل والوظائف المتوفرة في glibc، قد تنشأ مشاكل في التطبيقات التي يوجد فيها تقاطع للأسماء مع المكتبات غير المستخدمة سابقًا libpthread وlibdl وlibutil وlibresolv وlibanl.
- أُضيفت إمكانية استخدام نوع البيانات time_t ذي 64 بت في التكوينات التي كانت تستخدم تقليديًا نوع البيانات time_t ذي 32 بت. في هذه التكوينات، على سبيل المثال في أنظمة x86، يظل نوع البيانات time_t ذو 32 بت هو الافتراضي، ولكن يمكن الآن تغيير هذا السلوك باستخدام الماكرو "_TIME_BITS". هذه الميزة متاحة فقط على الأنظمة التي تحتوي على النواة Linux الإصدار 5.1 على الأقل.
- تمت إضافة وظيفة _Fork، وهي بديل لوظيفة fork التي تلبي متطلبات "async-signal-safe"، أي. السماح بالاتصال الآمن من معالجات الإشارة. أثناء تنفيذ _Fork، يتم إنشاء الحد الأدنى من البيئة الكافية لاستدعاء الوظائف في معالجات الإشارة مثل الرفع والتنفيذ دون تضمين ميزات قد تغير الأقفال أو الحالة الداخلية. سيتم تعريف استدعاء _Fork في إصدار مستقبلي لمعيار POSIX، ولكن في الوقت الحالي تم تضمينه كملحق GNU.
- للمنصة Linux تم تنفيذ وظيفة execveat، مما يسمح بتشغيل ملف تنفيذي من مُعرّف ملف مفتوح. تُستخدم هذه الوظيفة الجديدة أيضًا في تنفيذ استدعاء fexecve، الذي لا يتطلب تحميل نظام الملفات الوهمي /proc عند بدء التشغيل.
- تمت إضافة وظيفة timespec_getres، المحددة في مسودة معيار ISO C2X، والتي تعمل على توسيع وظيفة timespec_get بقدرات مشابهة لوظيفة POSIX Clock_getres.
- تمت إضافة الدالة close_range()، مما يسمح للعملية بإغلاق نطاق كامل من واصفات الملفات المفتوحة دفعة واحدة. هذه الدالة متاحة على الأنظمة التي تحتوي على النواة Linux، على الأقل الإصدار 5.9.
- تمت إضافة وظائف Closefrom وposix_spawn_file_actions_add Closefrom_np، مما يسمح لك بإغلاق جميع واصفات الملفات مرة واحدة، والتي يكون عددها أكبر من أو يساوي القيمة المحددة.
- في الوضعين "_DYNAMIC_STACK_SIZE_SOURCE" و"_GNU_SOURCE"، لم تعد PTHREAD_STACK_MIN وMINSIGSTKSZ وSIGSTKSZ ثوابت، مما يسمح بدعم مجموعات التسجيل ذات الحجم الديناميكي مثل تلك المتوفرة في ملحق ARM SVE.
- ينفذ الرابط خيار "--list-diagnostics" لعرض المعلومات المتعلقة بعمليات تعريف IFUNC (وظيفة غير مباشرة) واختيار الدليل الفرعي glibc-hwcaps.
- تم تنفيذ الماكرو __STDC_WANT_IEC_60559_EXT__، وهو مصمم للتحقق من وجود الوظائف المحددة في الملحق F من مواصفات ISO C2X.
- بالنسبة لأنظمة powerpc64*، تم تنفيذ خيار "--disable-scv"، والذي يسمح لك ببناء glibc دون دعم تعليمات scv.
- يتم ترك الحد الأدنى فقط من وحدات gconv الأساسية في ملف gconv-modules، ويتم نقل الباقي إلى ملف إضافي gconv-modules-extra.conf، الموجود في دليل gconv-modules.d.
- للمنصة Linux تم تنفيذ المعامل glibc.pthread.stack_cache_size، والذي يمكن استخدامه لتكوين حجم ذاكرة التخزين المؤقت لمكدس pthread.
- لقد تم إهمال وظيفة inet_neta من ملف الرأس ، بالإضافة إلى العديد من الوظائف النادرة الاستخدام من (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, p_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res _الاستعلام عن الاسم، res_queriesmatch، res_randomid، Sym_ntop وsym_ntos وsym_ston) و (ns_datetosecs، ns_format_ttl، ns_makecanon، ns_parse_ttl، ns_samedomain، ns_samename، ns_sprintrr، ns_sprintrrf، ns_subdomain). بدلا من هذه الوظائف، يوصى باستخدام مكتبات منفصلة للعمل مع DNS.
- لقد تم إهمال الوظائف pthread_mutex_consistent_np وthread_mutexattr_getrobust_np وpthread_mutexattr_setrobust_np وpthread_yield ويجب استخدام pthread_mutex_consistent وthread_mutexattr_getrobust وhread_mutexattr_setrobust وsched_yield بدلاً من ذلك.
- توقف عن استخدام الروابط الرمزية لربط الكائنات المشتركة المثبتة بإصدار Glibc. يتم الآن تثبيت مثل هذه الكائنات كما هي (على سبيل المثال، أصبح libc.so.6 الآن ملفًا وليس رابطًا إلى libc-2.34.so).
- افتراضيًا، يتم تعطيل ميزات تصحيح الأخطاء في malloc، مثل MALLOC_CHECK_ (glibc.malloc.check)، وmtrace() وmcheck()، والتي يتم نقلها إلى مكتبة منفصلة libc_malloc_debug.so، والتي تم أيضًا إضافة الوظائف القديمة malloc_get_state و malloc_set_state إليها. تم نقلها.
- В Linux تتطلب وظائف مثل shm_open و sem_open الآن وجود جهاز /dev/shm.
- تم إصلاح نقاط الضعف:
- CVE-2021-27645: تتعطل عملية nscd (برنامج التخزين المؤقت لخادم الأسماء) بسبب الاستدعاء المزدوج للوظيفة المجانية عند معالجة طلبات netgroup المعدة خصيصًا.
- CVE-2021-33574: الوصول إلى منطقة الذاكرة المحررة بالفعل (الاستخدام بعد الاستخدام) في وظيفة mq_notify عند استخدام نوع الإشعار SIGEV_THREAD مع سمة مؤشر الترابط التي تم تعيين قناع تقارب بديل لوحدة المعالجة المركزية (CPU) لها. يمكن أن تؤدي المشكلة إلى حدوث عطل، لكن لا يمكن استبعاد خيارات الهجوم الأخرى.
- CVE-2021-35942: يمكن أن يؤدي تجاوز حجم المعلمة في وظيفة wordexp إلى تعطل التطبيق.
المصدر: opennet.ru
