Glibc 2.35 Համակարգային գրադարանի թողարկում

Վեց ամիս մշակումից հետո թողարկվել է GNU C Library (glibc) 2.35 համակարգի գրադարանը, որը լիովին համապատասխանում է ISO C11 և POSIX.1-2017 ստանդարտների պահանջներին։ Նոր թողարկումը ներառում է ուղղումներ 66 մշակողների կողմից:

Glibc 2.35-ում իրականացված որոշ բարելավումներ ներառում են.

  • Ավելացվեց «C.UTF-8» տեղանքի աջակցությունը, որը ներառում է բոլոր Unicode կոդերի համադրման կանոնները, սակայն տարածք խնայելու համար սահմանափակվում է ASCII տիրույթների օգտագործմամբ fnmatch, regexec և regcomp գործառույթներում: Տեղակայումը մոտ 400 ԿԲ է, որից 346 ԿԲ-ն LC_CTYPE տվյալ է Յունիկոդի համար և պահանջում է առանձին տեղադրում (ներկառուցված չէ Glibc-ում):
  • Կոդավորման տվյալները, նիշերի տիպի տեղեկությունները և տառադարձման աղյուսակները թարմացվել են՝ աջակցելու Unicode 14.0.0 ճշգրտմանը:
  • IN Եվ Գործառույթները և մակրոներն իրականացվում են, որոնք արդյունքը կլորացնում են ավելի նեղ տեսակի՝ fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfNf, fMfmafN, fMf, fMf. Գործառույթները նկարագրված են TS 18661-1:2014, TS 18661-3:2015 բնութագրերում և ավելացվել են ապագա ISO C2X C ստանդարտի նախագծին:
  • IN Եվ ներդրված գործառույթներ և մակրոներ՝ գտնելու համար լողացող կետերի համարների նվազագույն և առավելագույնը float, long double, _FloatN և _FloatNx տիպերով, որոնք նկարագրված են IEEE 754-2019 բնութագրում և ավելացվել են ապագա ISO C2X C ստանդարտի նախագծին. fmaximum, fmaximum_num: , fmaximum_mag, fmaximum_mag_num, fnimum, fminimum_num, 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_SQRTQQS2, M_1_SQRTPIf, M_2_SQRTPIf, M_XNUMX_SQRTPIf, M_XNUMX_SQRTPIfXNUMX
  • Վերնագրի ֆայլում exp10 ֆունկցիաների համար Ավելացվել են համապատասխան մակրոներ, որոնք կապված չեն կոնկրետ տեսակների հետ:
  • IN ավելացրել է ISO C2X ստանդարտի նախագծում առաջարկված _PRINTF_NAN_LEN_MAX մակրո:
  • Printf ֆունկցիաների ընտանիքին ավելացվել են «%b» և «%B» ձևաչափի սպեցիֆիկատորներ՝ երկուական ներկայացման մեջ ամբողջ թվեր տպելու համար:
  • Դինամիկ կապող համակարգը կիրառում է DSO տեսակավորման նոր ալգորիթմ, որն օգտագործում է խորության առաջին որոնումը (DFS)՝ լուծելու կատարողականի խնդիրները, երբ կարգավորվում են օղակաձև կախվածությունները: DSO տեսակավորման ալգորիթմն ընտրելու համար առաջարկվում է glibc.rtld.dynamic_sort պարամետրը, որը կարող է սահմանվել «1»՝ վերադառնալու հին ալգորիթմին:
  • ABI-ն ավելացրել է «__memcmpeq» նոր ֆունկցիայի աջակցությունը, որն օգտագործվում է կոմպիլյատորների կողմից՝ «memcmp»-ի օգտագործումը օպտիմալացնելու համար, եթե այս ֆունկցիայի վերադարձած արժեքը օգտագործվում է միայն գործողության ավարտի կարգավիճակը ստուգելու համար:
  • Ավելացվել է աջակցություն՝ օգտագործելով rseq (վերագործարկվող հաջորդականություններ) համակարգային զանգը, որը տրամադրվել է Linux միջուկից 4.18-ից ի վեր: Rseq համակարգի կանչը թույլ է տալիս կազմակերպել հրահանգների խմբի շարունակական կատարումը, որը չի ընդհատվում և արդյունքը հաստատում է խմբի վերջին հրահանգով: Ըստ էության, այն ապահովում է գործողությունների ատոմային շատ արագ կատարման միջոց, որոնք, եթե ընդհատվեն մեկ այլ շղթայով, մաքրվում են և կրկին փորձվում:
  • Ավելացվեց symlink /usr/bin/ld.so:
  • Տրամադրված է ներկառուցված ծրագրերի բոլոր գործարկվող ֆայլերի լռելյայն հավաքումը և թեստային հավաքածուն PIE (դիրքից անկախ գործարկվող) ռեժիմում: Այս վարքագիծն անջատելու համար տրամադրվում է «--disable-default-pie» տարբերակը:
  • Linux-ի համար ավելացվել է glibc.malloc.hugetlb պարամետրը, որը թույլ է տալիս malloc-ի իրականացումը միացնել madvise համակարգի զանգը MADV_HUGEPAGE դրոշակով mmap-ի և sbrk-ի համար, կամ ուղղակիորեն օգտագործել մեծ հիշողության էջեր՝ նշելով MAP_HUGETLB դրոշը mmap-ում: զանգեր. Առաջին դեպքում արդյունավետության բարձրացում կարելի է ձեռք բերել, եթե Transparent Huge Pages-ն օգտագործվի madvise ռեժիմում, իսկ երկրորդ դեպքում՝ ապահովված է համակարգի կողմից վերապահված մեծ էջերից (Huge Pages) օգտագործելու հնարավորություն։
  • Ավելացվեց _dl_find_object ֆունկցիան, որը կարող է օգտագործվել՝ ավելացնելու համար զանգերի փաթեթի վերացման տեղեկատվություն:
  • Ավելացված է աջակցություն OpenRISC ճարտարապետության համար (or1k-linux-gnu) soft-float ռեժիմում: Նավահանգիստը պահանջում է binutils 2.35, GCC 11 և Linux kernel 5.4:
  • Ավելացվեց «--with-rtld-early-cflags» կառուցման դրոշը, որը կարող է օգտագործվել՝ նշելու լրացուցիչ կոմպիլյատորական դրոշներ, որոնք օգտագործվում են դինամիկ կապի սկզբնական կոդը կառուցելիս:
  • Linux պլատֆորմի համար ավելացվել է epoll_pwait2 ֆունկցիան, որը տարբերվում է epoll_wait-ից՝ նանվայրկյան ճշգրտությամբ նշելով ժամանակի վերջ:
  • Ավելացվեց posix_spawn_file_actions_addtcsetpgrp_np ֆունկցիան՝ նոր գործընթացի համար հսկիչ տերմինալ սահմանելիս մրցավազքի պայմանները վերացնելու համար:
  • Glibc-ով և GCC 12+-ով կազմված հավելվածների համար ներդրվում է «_FORTIFY_SOURCE=3» պաշտպանության ռեժիմը, որը հայտնաբերում է բուֆերի հնարավոր արտահոսքերը string.h վերնագրի ֆայլում սահմանված տողային գործառույթներն իրականացնելիս: «_FORTIFY_SOURCE=2» ռեժիմի տարբերությունը հանգեցնում է լրացուցիչ ստուգումների, որոնք կարող են հանգեցնել արդյունավետության նվազմանը:
  • Intel MPX-ի (Memory Protection Extensions) աջակցությունը, որն օգտագործվում էր ցուցիչները հիշողության սահմանները ստուգելու համար, դադարեցվել է (այս տեխնոլոգիան լայն տարածում չի գտել և արդեն հեռացվել է GCC-ից և LLVM-ից):
  • Prelink մեխանիզմը և դրա հետ կապված միջավայրի փոփոխականները 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() «/» գրացուցակի առանձին մոնտաժային կետի անվանատարածքում:

    Source: opennet.ru

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