Glibc 2.31 Жүйе кітапханасының шығарылымы

Алты айлық дамудан кейін жарияланған жүйелік кітапхананың шығарылымы GNU C кітапханасы (glibc) 2.31, ол ISO C11 және POSIX.1-2008 стандарттарының талаптарына толығымен сәйкес келеді. Жаңа шығарылым 58 әзірлеушінің түзетулерін қамтиды.

Glibc 2.31 нұсқасында енгізілгендерден жақсартулар мынаны атап өтуге болады:

  • Болашақ ISO стандартының жобасында анықталған мүмкіндіктерді қосу үшін _ISOC2X_SOURCE макросы қосылды. C2X. Бұл мүмкіндіктер _GNU_SOURCE макросын пайдаланғанда немесе “-std=gnu2x” жалаушасы бар gcc жүйесінде құру кезінде де қосылады;
  • Нәтижелерін кішірек түрге айналдыратын "math.h" тақырып файлында анықталған функциялар үшін TS 18661-1:2014 және TS спецификациялары талап еткендей, сәйкес жалпы типтегі макростар "tgmath.h" файлында ұсынылады. 18661-3: 2015 ж.;
  • Күту уақытын ескере отырып, ағынның аяқталуын күтетін pthread_clockjoin_np() функциясы қосылды (егер күту уақыты аяқталмай тұрып орын алса, функция қатені қайтарады). Ұнайды pthread_timedjoin_np(), pthread_clockjoin_np() ішінде күту уақытын есептеу үшін таймер түрін анықтауға болады - CLOCK_MONOTONIC (жүйенің ұйқы режимінде өткізген уақытын ескереді) немесе CLOCK_REALTIME;
  • DNS шешушісі енді /etc/resolv.conf ішіндегі сенімді жарнама опциясын және _res.options ішіндегі RES_TRUSTAD жалауын қолдайды, орнатылған кезде DNSSEC жалауы DNS сұрауларында жіберіледі. AD (аутентификацияланған деректер). Бұл режимде сервер орнатқан AD жалауы res_search() сияқты функцияларды шақыратын қолданбаларға қолжетімді болады. Әдепкі бойынша, ұсынылған опциялар орнатылмаса, glibc сұрауларда AD жалаушасын көрсетпейді және оны жауаптарда автоматты түрде өшіреді, бұл DNSSEC тексерулерінің жоқ екенін көрсетеді;
  • Glibc үшін жұмыс істейтін жүйелік қоңырау байланыстарын құру енді Linux ядросының тақырып файлдарын орнатуды қажет етпейді. Ерекшелік - 64-биттік RISC-V архитектурасы;
  • Жойылған осалдық CVE-2019-19126, бұл қорғанысты айналып өтуге мүмкіндік береді
    Setuid жалаушасы бар бағдарламаларда ASLR және LD_PREFER_MAP_32BIT_EXEC ортасының айнымалы мәнін өңдеу арқылы жүктелген кітапханалардағы мекенжай орналасуын анықтаңыз.

Үйлесімділікті бұзатын өзгерістер:

  • totalorder(), totalordermag() және басқа қалқымалы нүкте түрлері үшін ұқсас функциялар енді күйдегі мәндерді түрлендіру туралы ескертулерді жою үшін көрсеткіштерді дәлел ретінде қабылдайды NaN, болашақ C18661X стандарты үшін ұсынылған TS 1-2 ұсыныстарына сәйкес.
    Жылжымалы нүкте аргументтерін тікелей өткізетін бар орындалатын файлдар өзгертусіз жұмыс істей береді;

  • Ұзақ ескірген 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 астында ескірген (gettimeofday орнына clock_gettime ұсынылады), бірақ оны glibc жүйесінен жою жоспары жоқ;
  • settimeofday енді уақытты және уақытты түзету ығысуын орнатуға арналған параметрлердің бір уақытта өтуін қолдамайды. settimeofday шақырған кезде, аргументтердің бірі (уақыт немесе ығысу) енді нөлге орнатылуы керек, әйтпесе функция шақыруы EINVAL қатесімен сәтсіз болады. gettimeofday сияқты, settimeofday функциясы POSIX арқылы ескірген және оны clock_settime функциясымен немесе функциялардың adjtime тобымен ауыстыру ұсынылады;
  • SPARC ISA v7 архитектурасына қолдау көрсету тоқтатылды (v8 қолдауы әзірге сақталады, бірақ SuperSPARC процессорлары емес, LEON процессорлары сияқты CAS нұсқауларын қолдайтын процессорлар үшін ғана).
  • Егер жұптастыру сәтсіз болса "Жалқау", онда байланыстырушы функцияның символдарын осы функцияға бірінші шақыруға дейін іздемейді, dlopen функциясы енді процесті тоқтатуға мәжбүрлейді (бұрын сәтсіздік кезінде NULL мәнін қайтаратын);
  • MIPS қатты қалқымалы ABI үшін, құрастыру Linux 4.8+ ядросын пайдалануды “-enable-kernel=4.8.0” параметрі арқылы анық шектемесе (ядролары 4.8-ге дейін, бұзылулар) енді орындалатын стек пайдаланылады. кейбір MIPS конфигурациялары үшін байқалады);
  • Уақытты манипуляциялауға қатысты жүйелік қоңыраулардың айналасындағы байланыстар бар болса, time64 жүйелік шақыруын пайдалану үшін жылжытылды (32 биттік жүйелерде glibc алдымен 64 биттік уақыт түрін басқаратын жаңа жүйелік шақыруларды қолданады, ал егер жоқ болса, төмендейді. ескі 32-биттік қоңырауларға оралу).

Ақпарат көзі: opennet.ru

пікір қалдыру