بعد ستة أشهر من التطوير ، تم نشر إصدار مكتبة GNU C (glibc) 2.39 ، والتي تتوافق تمامًا مع متطلبات معايير ISO C11 و POSIX.1-2017. يتضمن الإصدار الجديد إصلاحات من 67 مطورًا.
من بين التحسينات التي تم تنفيذها في Glibc 2.39:
- تم توفير الدعم لمكدس الظل الذي تم تقديمه في النواة. Linux يُعالج الإصدار 6.6 العديد من الثغرات الأمنية بالاستفادة من إمكانيات معالجات إنتل لحماية عنوان الإرجاع من الكتابة فوق عنوان الدالة في حالة تجاوز سعة مخزن البيانات. تعمل هذه الحماية بتخزين عناوين الإرجاع ليس فقط في مكدس البيانات الرئيسي، بل أيضًا في مكدس "ظل" منفصل، لا يمكن تعديله مباشرةً بعد نقل التحكم إلى الدالة. قبل الخروج من الدالة، يُسحب عنوان الإرجاع من مكدس الظل ويُقارن بعنوان الإرجاع من المكدس الرئيسي. يؤدي عدم تطابق العناوين إلى ظهور استثناء، ما يمنع الحالات التي تنجح فيها الثغرة الأمنية في الكتابة فوق عنوان في المكدس الرئيسي. أُضيف خيار البناء "--enable-cet" لتفعيل هذه الحماية.
- تمت إضافة ملف رأس جديد ، كما هو محدد في مسودة معيار ISO C2X ويشتمل على الوظائف stdc_leading_zeros وstdc_leading_ones وstdc_trailing_zeros وstdc_trailing_ones وstdc_first_leading_zero وstdc_first_leading_one وstdc_first_trailing_zero وstdc_first_trailing_one وstdc_count_zeros وstdc_count_ones وstdc_has_single_bit وstdc_bit_width وstdc_bit_floor وstdc_bit_ceil في المتغيرات مع الأنواع 'unsigned char' و'unsigned short' و'unsigned int' و'unsigned long int' و'unsigned long long int'.
- للمنصة Linux تمّ تنفيذ الدالتين posix_spawnattr_getcgroup_np و posix_spawnattr_setcgroup_np، بالإضافة إلى علامة POSIX_SPAWN_SETCGROUP. تسمح هذه الدوال بتعيين cgroupv2 في عملية جديدة باستخدام الدالتين posix_spawn و posix_spawnp، مما يُزيل حالات التزامن غير المتوقعة. هذه الدوال هي امتدادات GNU وتتطلب نواة النظام للعمل. Linux مع دعم استدعاءات النظام في clone3.
- للمنصة Linux تم تنفيذ وظائف pidfd_spawn و pidfd_spawp، وهي متشابهة في دلالاتها مع وظيفة posix_spawn، ولكنها لا تُرجع مُعرّف عملية (PID)، بل تُرجع واصف ملف لاستخدامه في الوظائف التي تدعم آلية PIDF، مثل pidfd_send_signal و poll و waitid (يرتبط PID بعملية محددة ولا يتغير، بينما يمكن ربط PID بعملية أخرى بعد انتهاء العملية الحالية المرتبطة بهذا PID).
- للمنصة Linux تمت إضافة وظيفة pidfd_getpid لتحديد معرف العملية (PID) بناءً على واصف ملف العملية (PIDFD) الذي يتم إرجاعه بواسطة وظائف pid_spawn و fork_np و pidfd_open.
- تحتوي عائلة وظائف scanf على معدل حجم جديد "wN" ينطبق على الوسائط من الأنواع intN_t، وint_leastN_t، وuintN_t، وuint_leastN_t. على سبيل المثال، لقراءة القيم العشرية لأنواع int32_t و int_least32_t، يمكنك تحديد "%w32d"، والقيم السداسية عشرية - "%w32x". على نحو مماثل، تمت إضافة المُعدِّل "wfN" لأنواع int_fastN_t وuint_fastN_t المقدمة في مسودة معيار ISO C2X.
- تمت إضافة الإعداد "glibc.cpu.plt_rewrite"، الذي يتيح إعادة كتابة PLT (جدول ارتباط الإجراءات) على أنظمة x86-64، حيث يقوم الرابط باستبدال الفروع غير المباشرة في PLT بأخرى مباشرة.
- تمت إضافة إعداد "glibc.mem.decorate_maps" ليشمل معلومات إضافية حول تخصيص الذاكرة (على سبيل المثال، كومة الخيوط التي تم إنشاؤها بواسطة pthread_create أو الذاكرة المخصصة عبر malloc).
- يقوم هيكل "statvfs" الآن بملء حقل "f_type" بمعلومات حول نوع نظام الملفات، وهو ما يعادل محتويات الحقل في هيكل "statfs". سابقًا، Linux كان حقل "f_type" يحتوي دائمًا على القيمة 0.
- بالنسبة لمنصة AArch64، تمت إضافة التعليقات التوضيحية إلى libmvec و math.h لتمكين متجه المكالمات عند البناء باستخدام GCC 9 وإصدارات المترجم الأحدث عند تحديد خيار البناء "-ffast-math". تم تمكين المتجهات للوظائف الرياضية acos، acosf، asin، asinf، atan، atanf، atan2، atan2f، cos، cosf، exp، expf، exp10، exp10f، exp2، exp2f، expm1، expm1f، log، logf، log10، log10f، log1p، log1pf، log2، log2f، sin، sinf، tan، وtanf.
- تمت إزالة مكتبة libcrypt وملف الرأس المرتبط بها من الحزمة. ". نشجع مطوري التطبيقات على التحول إلى استخدام مكتبات بديلة مثل libxcrypt.
- تتخطى أداة ldconfig الآن الملفات التي تحتوي على ; حرف في اسم الملف أو ينتهي بـ ".dpkg.tmp" و ".dpkg.new"، مما يسمح بعدم معالجة الملفات المؤقتة لمديري الحزم rpm وdpkg.
- تم إيقاف دعم بنية ia64 (ia64*-*-linux-gnu) المستخدمة في معالجات Intel Itanium.
- تم إصلاح نقاط الضعف:
- CVE-2023-6246، CVE-2023-6779، CVE-2023-6780 — نقاط ضعف حرجة في وظيفة __vsyslog_internal()، والتي تسمح، من خلال التلاعب بتشغيل تطبيقات SUID، بتحقيق تنفيذ الكود الخاص بها بامتيازات مرتفعة.
- CVE-2023-4911 - ثغرة أمنية في Glibc ld.so تسمح بالحصول على امتيازات الجذر في النظام. تنتج هذه الثغرة الأمنية عن خطأ في كود تحليل سلسلة محددة في متغير البيئة GLIBC_TUNABLES ويمكن أن تؤدي إلى كتابة القيمة المحللة بعد نهاية المخزن المؤقت المخصص. هناك استغلالات عاملة.
- CVE-2023-4806 هي ثغرة أمنية في وظيفة getaddrinfo عند الاستخدام بعد التحرير. تحدث المشكلة عندما ينفذ مكون NSS فقط استدعاءات "_gethostbyname2_r" و"_getcanonname_r"، لكنه لا يدعم استدعاء "_gethostbyname3_r". لاستغلال الثغرة الأمنية، يجب على خادم DNS إرجاع عدد كبير من عناوين IPv6 وIPv4 للمضيف المطلوب، مما سيؤدي إلى تعطل العملية التي استدعت وظيفة getaddrinfo لعائلة AF_INET6 عند تعيين العلامات AI_CANONNAME وAI_ALL وAI_V4MAPPED.
- CVE-2023-4527 - تسمح ثغرة أمنية في وظيفة getaddrinfo بقراءة البيانات من مخزن مؤقت خارج الحدود عند معالجة استجابة DNS المستلمة عبر TCP أكبر من 2048 بايت. تحدث الثغرة الأمنية عند استخدام الخيار "no-aaaa" في /etc/resolv.conf.
بالإضافة إلى ذلك، يجدر بالذكر إصدار مجموعة أدوات النظام GNU Binutils 2.42، والتي تتضمن برامج مثل GNU linker، وGNU assembler، وnm، وobjdump، وstrings، وstrip.
في الإصدار الجديد من Binutils:
- تمت إضافة خيار تجريبي "--scfi=experimental" إلى المجمع (gas) لأنظمة x86-64 لتجميع بنيات CFI (Control Flow Integrity) للكود التجميعي المكتوب يدويًا والذي يتوافق مع System V AMD64 ABI.
- يحتوي برنامج readelf على خيار "--extra-sym-info" لطباعة معلومات موسعة حول الرموز ("--symbols")، مثل اسم القسم المشار إليه بواسطة مؤشر st_shndx.
- توفر أداة objcopy الآن القدرة على استخدام خيار "--set-section-flags" الخاص بـ "large" لتعيين علم القسم SHF_X86_64_LARGE لكائنات ELF على أنظمة x86-64. يدعم خيار "--visualize-jumps" الآن بنية s390.
- عند تفكيك تعليمات s390، تم تنفيذ القدرة على عرض التعليقات في وصف التعليمات. لتفعيل الأوصاف في objdump، يمكنك تحديد الخيار "-M insndesc"، وفي gdb، يمكنك تحديد الإعداد "set disassembler-options insndesc".
- تم تحديث الرابط باستخدام خياري "-z mark-plt" و"-z nomark-plt" لتمييز الإدخالات في جدول PLT باستخدام العلامات DT_X86_64_PLT، وDT_X86_64_PLTSZ، وDT_X86_64_PLTENT.
- يدعم الملحن الآن الفرز العكسي.
- تمت إضافة خيارات "--warn-execstack-objects" و"--error-execstack" و"--error-rxw-segments" لإخراج التحذيرات أو الأخطاء عند استخدامها في كائنات المكدس القابلة للتنفيذ.
- تم تنفيذ دعم ABI 2.30 لهندسة LoongArch، بالإضافة إلى دعم التعليمات الجديدة المحددة في مواصفات LoongArch 1.10.
- تمت إضافة الدعم لمجموعة تعليمات KVX المستخدمة في معالجات Kalray (على سبيل المثال، المستخدمة في أنظمة SoC من Coolidge).
- بالنسبة للأنظمة المعتمدة على بنية Intel، تمت إضافة الدعم للملحقات التالية:
- إنتل APX: 32 جي بي آر، إن دي دي، PUSH2/POP2، بوشب/بوب.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- تم تحديث منفذ RISC-V لدعم الامتدادات التالية:
- T-Head (XTheadVector، XTheadZvlsseg وXTheadZvamo).
- CORE-V (XCVmac، XCValu).
- SiFive VCIX (XSfVcp).
- تم تحديث المنفذ الخاص بهندسة AArch64 لدعم الامتدادات التالية:
- SVE2.1 (امتداد المتجه القابل للتطوير 2.1).
- SME2.1 (امتداد المصفوفة القابلة للتطوير 2.1).
- B16B16 (BFloat16 وBFloat16 لـ SVE2 وSME2).
- RASv2 (الموثوقية والتوافر والقدرة على الخدمة v2).
- LSE128 (128 بت ذري).
- GCS (مجموعة التحكم المحمية).
- CHK (التحقق من حالة الميزة).
- SPECRES2 (تقييد المضاربة المعزز).
- LRCPC3 (تحميل-اكتساب RCpc).
- (تقوية الترجمة).
- ITE (تتبع التعليمات).
- D128 (مُوصَفات جدول صفحات الذاكرة ذات 128 بت).
- XS (سمة ذاكرة XS).
- تمت إضافة الدعم لمعالجات AArch64 Cortex-A520 وCortex-A720 وCortex-X3 وCortex-X4.
- تم تحديث مُجمِّع BPF لدعم فصل التعليقات باستخدام الرمزين "#" و"//"، بالإضافة إلى استخدام ";" الرمز، للتوافق مع مُجمِّع clang/LLVM. لفصل التعبيرات على سطر واحد (لم يعد من الممكن استخدام ";" للتعليقات).
المصدر: opennet.ru
