Glibc 2.35 Системийн номын сангийн хувилбар

Зургаан сарын турш хөгжүүлсний дараа ISO C2.35 болон POSIX.11-1 стандартын шаардлагад бүрэн нийцсэн GNU C Library (glibc) 2017 системийн номын сан гарсан. Шинэ хувилбарт 66 хөгжүүлэгчийн засварууд багтсан болно.

Glibc 2.35-д хэрэгжүүлсэн зарим сайжруулалтууд нь:

  • Бүх Юникод кодын харьцуулах дүрмийг агуулсан "C.UTF-8" хэлний дэмжлэгийг нэмсэн боловч зай хэмнэхийн тулд fnmatch, regexec болон regcomp функцэд ASCII мужуудыг ашиглахаар хязгаарлагддаг. Хэмжээ нь 400 КБ, үүнээс 346 КБ нь Юникодын LC_CTYPE өгөгдөл бөгөөд тусдаа суулгацыг шаарддаг (Glibc-д суулгаагүй).
  • Юникод 14.0.0 тодорхойлолтыг дэмжихийн тулд кодчилолын өгөгдөл, тэмдэгтийн төрлийн мэдээлэл, галиглах хүснэгтүүд шинэчлэгдсэн.
  • IN Тэгээд Үр дүнг илүү нарийсгах функцууд болон макронууд хэрэгждэг: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafxMf, fMfmafxMf. Функцуудыг TS 18661-1:2014, TS 18661-3:2015 техникийн үзүүлэлтүүдэд тайлбарласан бөгөөд ирээдүйн ISO C2X C стандартын төсөлд нэмж оруулсан болно.
  • IN Тэгээд IEEE 754-2019 тодорхойлолтод тодорхойлсон float, long double, _FloatN болон _FloatNx төрлийн хөвөгч цэгүүдийн хамгийн бага ба дээд хэмжээг олох функцууд болон макронуудыг хэрэгжүүлсэн бөгөөд ирээдүйн ISO C2X C стандартын төсөлд нэмж оруулсан: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_mum, fminimum_mag, fminimum_mag_num.
  • IN Нэг нарийвчлалтай хөвөх цэгийн тоонуудын тогтмолуудыг нэмсэн: 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_SSQRTS1.
  • Толгой файл дахь exp10 функцуудын хувьд Тодорхой төрлүүдтэй холбоогүй харгалзах макронуудыг нэмсэн.
  • IN ISO C2X стандартын төсөлд санал болгосон _PRINTF_NAN_LEN_MAX макро нэмсэн.
  • Бүхэл тоонуудыг хоёртын дүрслэлд хэвлэхийн тулд printf функцүүдийн бүлэгт "%b" болон "%B" форматын тодорхойлогчийг нэмсэн.
  • Динамик холбох систем нь давталтын хамаарлын гүйцэтгэлийн асуудлыг шийдвэрлэхийн тулд эхлээд гүнзгий хайлт (DFS) ашигладаг DSO хэмээх шинэ эрэмбэлэх алгоритмыг хэрэгжүүлдэг. DSO эрэмбэлэх алгоритмыг сонгохын тулд glibc.rtld.dynamic_sort параметрийг санал болгож байгаа бөгөөд үүнийг хуучин алгоритм руу буцаахын тулд "1" болгож тохируулж болно.
  • Хэрэв энэ функцийн буцаасан утгыг зөвхөн үйл ажиллагааны гүйцэтгэлийн төлөвийг шалгахад ашигладаг бол 'memcmp'-ийн хэрэглээг оновчтой болгохын тулд хөрвүүлэгчдийн ашигладаг '__memcmpeq' шинэ функцийн дэмжлэгийг ABI нэмсэн.
  • Линукс цөмийн 4.18 хувилбараас хойш өгөгдсөн rseq (дахин эхлүүлэх боломжтой дараалал) системийн дуудлагыг ашиглан хэлхээг автоматаар бүртгэх дэмжлэг нэмэгдсэн. Rseq системийн дуудлага нь тасалдалгүй бүлэг зааврын тасралтгүй гүйцэтгэлийг зохион байгуулах боломжийг олгодог бөгөөд бүлгийн сүүлчийн зааварчилгаагаар үр дүнг баталгаажуулдаг. Үндсэндээ энэ нь өөр урсгалаар тасалдсан тохиолдолд цэвэрлэж, дахин оролдох үйлдлүүдийг маш хурдан атомаар гүйцэтгэх арга хэрэгсэл болдог.
  • Symlink /usr/bin/ld.so нэмсэн.
  • Embedded програмуудын бүх гүйцэтгэгдэх файлуудын анхдагч угсралт болон PIE (байрлалаас хамааралгүй гүйцэтгэх) горим дахь туршилтын багцыг өгсөн болно. Энэ үйлдлийг идэвхгүй болгохын тулд "--disable-default-pie" сонголтыг өгсөн болно.
  • Линуксийн хувьд mmap болон sbrk-д MADV_HUGEPAGE туг бүхий madvise системийн дуудлагыг ашиглах, эсвэл mmap-д MAP_HUGETLB тугийг зааж өгснөөр том санах ойн хуудсыг шууд ашиглахын тулд malloc хэрэгжилтийг өөрчлөхийн тулд glibc.malloc.hugetlb тохиргоог нэмсэн. дуудлага. Эхний тохиолдолд Transparent Huge Pages-ийг madvise горимд ашиглавал гүйцэтгэлийн өсөлтөд хүрч болох бөгөөд хоёр дахь тохиолдолд системд хадгалагдсан Huge Pages ашиглах боломжтой болно.
  • Дуудлагын стекийг задлах мэдээллийг нэмэхэд ашиглаж болох _dl_find_object функцийг нэмсэн.
  • Зөөлөн хөвөх горимд OpenRISC архитектурын (or1k-linux-gnu) дэмжлэг нэмсэн. Порт нь binutils 2.35, GCC 11, Linux kernel 5.4 шаардлагатай.
  • "--with-rtld-early-cflags" бүтээх тугийг нэмсэн бөгөөд энэ нь динамик холболтын анхны кодыг бүтээхэд ашигласан нэмэлт эмхэтгэлийн тугуудыг зааж өгөхөд ашиглагдана.
  • Линукс платформын хувьд epoll_pwait2 функцийг нэмсэн бөгөөд энэ нь epoll_wait-ээс нано секундын нарийвчлалтайгаар завсарлах хугацааг зааж өгсөнөөрөө ялгаатай.
  • Шинэ процесст хяналтын терминал тохируулах үед уралдааны нөхцлийг арилгахын тулд posix_spawn_file_actions_addtcsetpgrp_np функцийг нэмсэн.
  • Glibc болон GCC 12+ дээр эмхэтгэсэн програмуудын хувьд string.h толгой файлд тодорхойлсон мөрийн функцийг гүйцэтгэх үед буферийн халилтыг илрүүлдэг “_FORTIFY_SOURCE=3” хамгаалалтын горим хэрэгждэг. “_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() функцийн эмзэг байдал юм. SUID-root fusermount програмын хувьд энэ эмзэг байдлыг процессын санах ойноос чухал мэдээлэл авах, тухайлбал заагчийн талаарх мэдээллийг авахад ашиглаж болно.
    • CVE-2021-3999 - getcwd() функц дэх ганц байт буфер халилт. Асуудал нь 1995 оноос хойш гарч ирсэн алдаанаас үүдэлтэй. Халилт үүсгэхийн тулд тусдаа холбох цэгийн нэрийн зай дахь "/" директор дээрх chdir()-г дуудах хэрэгтэй.

    Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх