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

Զարգացման վեց ամիս հետո հրատարակված համակարգի գրադարանի թողարկում GNU C գրադարան (glibc) 2.31, որը լիովին համապատասխանում է ISO C11 և POSIX.1-2008 պահանջներին: Նոր թողարկումը ներառում է ուղղումներ 58 մշակողների կողմից:

Իրականացվել է Glibc 2.31-ում բարելավումներ կարող եք նշել.

  • Ավելացվեց _ISOC2X_SOURCE մակրո՝ ապագա ISO ստանդարտի նախագծում սահմանված հնարավորությունները միացնելու համար C2X. Այս հնարավորությունները միացված են նաև _GNU_SOURCE մակրո օգտագործելով կամ gcc-ում «-std=gnu2x» դրոշակով կառուցելիս;
  • «math.h» վերնագրի ֆայլում սահմանված գործառույթների համար, որոնք կլորացնում են իրենց արդյունքները ավելի փոքր տեսակի, «tgmath.h» ֆայլում առաջարկվում են համապատասխան ընդհանուր տիպի մակրոները, ինչպես պահանջվում է TS 18661-1:2014 և TS բնութագրերով: 18661-3: 2015 թ.
  • Ավելացվեց pthread_clockjoin_np() ֆունկցիան, որը սպասում է շարանի ավարտին` հաշվի առնելով ժամանակի վերջը (եթե ժամանակի վերջնաժամկետը տեղի է ունենում մինչև ավարտը, ֆունկցիան կվերադարձնի սխալ): Ի տարբերություն pthread_timedjoin_np(), pthread_clockjoin_np()-ում հնարավոր է սահմանել ժամանակի հաշվման ժամանակաչափի տեսակը՝ CLOCK_MONOTONIC (հաշվի է առնում համակարգի կողմից քնի ռեժիմում անցկացրած ժամանակը) կամ CLOCK_REALTIME;
  • DNS լուծիչը այժմ աջակցում է վստահության գովազդի տարբերակը /etc/resolv.conf-ում և RES_TRUSTAD դրոշը _res.options-ում, երբ սահմանված է, DNSSEC դրոշը փոխանցվում է DNS հարցումներում: AD (վավերացված տվյալներ): Այս ռեժիմում սերվերի կողմից սահմանված AD դրոշը հասանելի է դառնում այն ​​հավելվածներին, որոնք կանչում են գործառույթներ, ինչպիսին է res_search(): Լռելյայնորեն, եթե առաջարկվող տարբերակները սահմանված չեն, glibc-ը հարցումներում չի նշում AD դրոշը և ինքնաբերաբար մաքրում է այն պատասխաններում՝ նշելով, որ DNSSEC ստուգումները բացակայում են.
  • Glibc-ի համար աշխատանքային համակարգերի զանգերի կապակցում ստեղծելու համար այլևս չի պահանջվում Linux միջուկի վերնագրի ֆայլերի տեղադրում: Բացառություն է 64-բիթանոց RISC-V ճարտարապետությունը;
  • Վերացված խոցելիություն CVE-2019-19126- ը, որը թույլ է տալիս շրջանցել պաշտպանությունը
    ASLR-ը setuid դրոշով ծրագրերում և որոշել հասցեների դասավորությունը բեռնված գրադարաններում LD_PREFER_MAP_32BIT_EXEC միջավայրի փոփոխականի մանիպուլյացիայի միջոցով:

Փոփոխություններ, որոնք խախտում են համատեղելիությունը.

  • totalorder(), totalordermag() և նմանատիպ գործառույթները այլ լողացող կետերի տեսակների համար այժմ ընդունում են ցուցիչները որպես արգումենտներ՝ արժեքների փոխակերպման վերաբերյալ զգուշացումները վերացնելու համար: NaN, համաձայն TS 18661-1 առաջարկությունների, որոնք առաջարկվել են ապագա C2X ստանդարտի համար:
    Գոյություն ունեցող գործադիրները, որոնք ուղղակիորեն անցնում են լողացող կետի փաստարկները, կշարունակեն աշխատել առանց փոփոխության.

  • Երկար ժամանակ հնացած stime ֆունկցիան այլևս հասանելի չէ glibc-ով կապված երկուականների համար, և դրա սահմանումը հեռացվել է time.h-ից: Համակարգի ժամանակը սահմանելու համար օգտագործեք clock_settime ֆունկցիան: Ապագայում մենք նախատեսում ենք հեռացնել հնացած ftime ֆունկցիան, ինչպես նաև sys/timeb.h վերնագրի ֆայլը (ftime-ի փոխարեն պետք է օգտագործել gettimeofday կամ clock_gettime);
  • Gettimeofday ֆունկցիան այլևս չի փոխանցում ամբողջ համակարգի ժամային գոտու մասին տեղեկատվություն (այս հատկանիշը տեղին էր 4.2-BSD-ի օրերում և երկար տարիներ հնացած էր): «tzp» արգումենտն այժմ պետք է փոխանցվի զրոյական ցուցիչ, և localtime() ֆունկցիան պետք է օգտագործվի՝ ներկայիս ժամանակի հիման վրա ժամային գոտու մասին տեղեկատվություն ստանալու համար: Gettimeofday-ը ոչ զրոյական «tzp» արգումենտով կանչելը ժամանակային գոտու կառուցվածքում կվերադարձնի դատարկ tz_minuteswest և tz_dsttime դաշտերը: Gettimeofday ֆունկցիան ինքնին հնացած է POSIX-ի ներքո (clock_gettime-ը խորհուրդ է տրվում gettimeofday-ի փոխարեն), բայց այն glibc-ից հեռացնելու պլան չկա;
  • settimeofday-ն այլևս չի աջակցում պարամետրերի միաժամանակյա փոխանցումը ժամանակի և ժամանակի շտկման փոխհատուցման համար: Settimeofday-ը կանչելիս արգումենտներից մեկը (ժամանակ կամ օֆսեթ) այժմ պետք է սահմանվի null-ի, հակառակ դեպքում ֆունկցիայի կանչը կձախողվի EINVAL սխալով: Ինչպես gettimeofday-ը, այնպես էլ settimeofday ֆունկցիան հնացած է POSIX-ում և խորհուրդ է տրվում այն ​​փոխարինել clock_settime ֆունկցիայով կամ adjtime-ի գործառույթների ընտանիքով;
  • SPARC ISA v7 ճարտարապետության աջակցությունը դադարեցվել է (v8 աջակցությունն առայժմ պահպանվում է, բայց միայն այն պրոցեսորների համար, որոնք աջակցում են CAS հրահանգներին, ինչպիսիք են LEON պրոցեսորները, ոչ թե SuperSPARC պրոցեսորները):
  • Եթե ​​զուգավորումը ձախողվի «ծույլ«, երբ կապակցիչը չի որոնում ֆունկցիայի նշանները մինչև այդ ֆունկցիայի առաջին կանչը, dlopen ֆունկցիան այժմ ստիպում է գործընթացն ավարտվել (նախկինում ձախողման դեպքում վերադարձնում էր NULL-ը);
  • MIPS hard-float ABI-ի համար գործարկվող կույտը այժմ օգտագործվում է, եթե build-ը բացահայտորեն չի սահմանափակում Linux միջուկի օգտագործումը 4.8+ «-enable-kernel=4.8.0» պարամետրի միջոցով (մինչև 4.8 միջուկներով, խափանումներ են դիտարկված MIPS-ի որոշ կոնֆիգուրացիաների համար);
  • Համակարգային զանգերի շուրջ կապված ժամանակի մանիպուլյացիայի հետ կապված կապերը տեղափոխվել են՝ օգտագործելու time64 համակարգի կանչը, եթե առկա է (32-բիթանոց համակարգերում glibc-ը նախ փորձում է նոր համակարգային զանգեր, որոնք շահարկում են 64-բիթանոց ժամանակի տեսակը, և եթե չկա, ապա ընկնում է: վերադառնալ հին 32-բիթանոց զանգերին):

Source: opennet.ru

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