Glibc 2.35 Sistem Kitabxanası Buraxılışı

Altı aylıq inkişafdan sonra ISO C2.35 və POSIX.11-1 standartlarının tələblərinə tam uyğun gələn GNU C Library (glibc) 2017 buraxılışı dərc olunur. Yeni buraxılışa 66 tərtibatçı tərəfindən düzəlişlər daxildir.

Glibc 2.35-də həyata keçirilən təkmilləşdirmələr arasında:

  • Bütün Unicode kodları üçün harmanlamaları ehtiva edən, lakin yerə qənaət etmək üçün fnmatch, regexec və regcomp funksiyalarında ASCII diapazonlarından istifadə etməklə məhdudlaşan "C.UTF-8" dili üçün əlavə dəstək. Yerli parametr təxminən 400 KB-dır, bunun 346 KB Unicode LC_CTYPE verilənləridir və ayrıca quraşdırılmalıdır (Glibc-ə daxil deyil).
  • Unicode 14.0.0 spesifikasiyasını dəstəkləmək üçün kodlaşdırma məlumatları, simvol tipi məlumatı və transliterasiya cədvəlləri yeniləndi.
  • IN Və Nəticəni daha dar tipə yuvarlaqlaşdıran funksiyalar və makrolar həyata keçirilir: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfNxMf və fMfmafNx. Funksiyalar TS 18661-1:2014, TS 18661-3:2015 spesifikasiyalarında təsvir edilmiş və gələcək ISO C2X C standartının layihəsinə əlavə edilmişdir.
  • IN Və IEEE 754-2019 spesifikasiyasında təsvir edilmiş və gələcək ISO C2X C standartının layihəsinə əlavə edilmiş float, long double, _FloatN və _FloatNx növləri ilə üzən nöqtəli ədədlərin minimum və maksimumunu tapmaq üçün funksiyalar və makrolar həyata keçirmişdir: fmaximum, fmaximum_num, fmaximumnum, fmaximumnumg, fmaximumnmag, fmaximumnummg , fminimum_mag, fminimum_mag_ sayı.
  • IN tək dəqiqlikli üzən nöqtə nömrələri üçün əlavə edilmiş sabitlər: 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_2_SQRTPIf, M_1_sq.f
  • Başlıq faylında exp10 funksiyaları üçün xüsusi növlərə bağlı olmayan müvafiq makrolar əlavə edildi.
  • IN ISO C2X standart layihəsində təklif olunan _PRINTF_NAN_LEN_MAX makrosunu əlavə etdi.
  • Tam ədədləri ikili təsvirdə çap etmək üçün printf ailəsi funksiyalarına "%b" və "%B" format təyinediciləri əlavə edilmişdir.
  • Dinamik əlaqələndirmə sistemi, dövrəli asılılıqları idarə edərkən performans problemlərini həll etmək üçün dərinlikdən əvvəl axtarışdan (DFS) istifadə edən yeni DSO çeşidləmə alqoritmini tətbiq edir. DSO çeşidləmə alqoritmini seçmək üçün glibc.rtld.dynamic_sort parametri təklif olunur, ona köhnə alqoritmə qayıtmaq üçün "1" dəyəri təyin edilə bilər.
  • Yeni '__memcmpeq' funksiyası üçün dəstək ABI-yə əlavə edildi, bu funksiyanın qaytarılması dəyəri yalnız əməliyyatın tamamlanma vəziyyətini yoxlamaq üçün istifadə edildikdə, tərtibçilər tərəfindən 'memcmp' istifadəsini optimallaşdırmaq üçün istifadə olunur.
  • Linux kernel 4.18-dən bəri təqdim olunan rseq (yenidən başlana bilən ardıcıllıqlar) sistem çağırışından istifadə edərək mövzuların avtomatik qeydiyyatı üçün əlavə dəstək. rseq sistem çağırışı kəsilməyən və nəticəni qrupdakı sonuncu təlimatla təsdiqləyən bir qrup təlimatın davamlı icrasını təşkil etməyə imkan verir. Əslində, o, əməliyyatların çox sürətli atomik icrası üçün bir imkan təmin edir, əgər başqa bir iplə kəsilərsə, təmizlənir və yenidən sınaqdan keçirilir.
  • /usr/bin/ld.so simvolik keçid əlavə edildi.
  • Quraşdırılmış proqramların bütün icra edilə bilən fayllarının standart olaraq yığılması və PIE rejimində sınaq paketi (mövqedən asılı olmayaraq icra edilə bilən) təmin edilir. Bu davranışı aradan qaldırmaq üçün "--disable-default-pie" seçimi təmin edilir.
  • Linux üçün glibc.malloc.hugetlb parametri mmap və sbrk üçün MADV_HUGEPAGE bayrağı ilə madvise sistem çağırışından istifadə etmək üçün malloc tətbiqini dəyişmək və ya mmap zənglərində MAP_HUGETLB bayrağını göstərərək birbaşa böyük yaddaş səhifələrindən istifadə etmək üçün əlavə edilmişdir. Birinci halda, Transparent Huge Pages madvise rejimində istifadə edilərsə, performans artımına nail ola bilərsiniz, ikinci halda isə sistem tərəfindən qorunan böyük səhifələrdən (Huge Pages) istifadə edə bilərsiniz.
  • _dl_find_object funksiyası əlavə edildi, ondan zəng yığınının açılması haqqında məlumat əlavə etmək üçün istifadə edilə bilər.
  • Üzən nöqtəli emal rejimində (soft-float) OpenRISC arxitekturası (or1k-linux-gnu) üçün əlavə dəstək. Liman binutils 2.35, GCC 11 və Linux 5.4 kernel tələb edir.
  • Dinamik əlaqələndirmə üçün ilkin kod qurarkən istifadə ediləcək əlavə tərtib bayraqlarını müəyyən etmək üçün "--with-rtld-early-cflags" qurma bayrağı əlavə edildi.
  • Linux platforması üçün epoll_pwait2 funksiyası əlavə edilmişdir ki, bu da epoll_wait-dən nanosaniyə dəqiqliyi ilə vaxt aşımı təyin etməklə fərqlənir.
  • Yeni proses üçün nəzarət terminalı qurarkən yarış şərtlərinin qarşısını almaq üçün posix_spawn_file_actions_addtcsetpgrp_np funksiyası əlavə edildi.
  • Glibc və GCC 12+ ilə tərtib edilmiş proqramlar üçün string.h başlıq faylında müəyyən edilmiş sətir funksiyalarını yerinə yetirərkən mümkün bufer daşqınlarını aşkar edən "_FORTIFY_SOURCE=3" mühafizə rejimi həyata keçirilir. "_FORTIFY_SOURCE=2" rejimindən fərq potensial olaraq performansın aşağı düşməsinə səbəb ola biləcək əlavə yoxlamalara aiddir.
  • Göstəricilərin yaddaş sahələrinin sərhədlərinə uyğunluğunu yoxlamaq üçün istifadə edilən Intel MPX (Yaddaş Mühafizəsi Genişləndirilməsi) genişləndirmələrinə dəstək dayandırılıb (göstərilən texnologiya geniş istifadə olunmayıb və artıq GCC və LLVM-dən çıxarılıb).
  • Köhnəlmişdir və gələcək buraxılışda silinəcək, ilkin keçid mexanizmi və onunla əlaqəli mühit dəyişənləri LD_TRACE_PRELINKING və LD_USE_LOAD_BIAS.

    Zəifliklər düzəldildi:

    • CVE-2022-23218, CVE-2022-23219 - Kopyalanan məlumatların ölçüsünü yoxlamadan fayl adı parametrinin məzmununun yığına kopyalanması nəticəsində yaranan svcunix_create və clnt_create funksiyalarında bufer daşması. Stack mühafizəsi olmadan qurulan və "unix" protokolundan istifadə edən proqramlar üçün boşluq çox uzun fayl adlarını işləyərkən zərərli kodun icrasına səbəb ola bilər.
    • CVE-2021-3998, yığından təmizlənməmiş qalıq məlumatı ehtiva edən müəyyən şərtlər altında yanlış dəyərin qaytarılması nəticəsində yaranan realpath() funksiyasında zəiflikdir. SUID-root fusermount proqramı üçün zəiflik prosesin yaddaşından həssas məlumatları əldə etmək, məsələn, göstəricilər haqqında məlumat əldə etmək üçün istifadə edilə bilər.
    • CVE-2021-3999 - getcwd() funksiyasında tək bayt bufer daşması. Problem 1995-ci ildən bəri mövcud olan bir səhvdən qaynaqlanır. Ayrı bir bağlama nöqtəsi ad məkanında daşma çağırmaq üçün "/" kataloqu üçün chdir () çağırmaq kifayətdir.

    Mənbə: opennet.ru

Добавить комментарий