Efter seks måneders udvikling er systembiblioteket GNU C Library (glibc) 2.35 blevet udgivet, som fuldt ud overholder kravene i standarderne ISO C11 og POSIX.1-2017. Den nye version inkluderer rettelser fra 66 udviklere.
Blandt de forbedringer, der er implementeret i Glibc 2.35, kan nævnes:
- Der er tilføjet support til lokaliteten «C.UTF-8», som omfatter sorteringsregler for alle Unicode-koder, men for at spare plads er den begrænset til at bruge ASCII-områder i funktionerne fnmatch, regexec og regcomp. Lokaliteten fylder cirka 400 KB, hvoraf 346 KB består af LC_CTYPE-data for Unicode, og den kræver en separat installation (den er ikke indbygget i Glibc).
- Teoretisk data, oplysninger om tegnkategorier og translitterationstabeller er blevet opdateret for at understøtte Unicode-specifikationen 14.0.0.
- I
- I
- I
- For funktionerne exp10 er der tilføjet de relevante makroer til headerfilen , som ikke er bundet til specifikke typer.
- I er makroen _PRINTF_NAN_LEN_MAX blevet tilføjet, foreslået i udkastet til standarden ISO C2X.
- Der er tilføjet format-specifikatorerne «%b» og «%B» til printf-familiefunktionerne for at udskrive heltal i binær repræsentation.
- I systemet til dynamisk linking er der implementeret en ny DSO-sorteringsalgoritme, der bruger en dybde-første-søgning (DFS) metode til at adressere ydeevneproblemer ved behandling af cirkulære afhængigheder. For at vælge DSO-sorteringsalgoritmen er parameteren glibc.rtld.dynamic_sort foreslået, som kan tildeles værdien «1» for at gå tilbage til den gamle algoritme.
- ABI har fået tilføjet støtte til den nye funktion ‘__memcmpeq’, der anvendes af compilere til at optimere brugen af ‘memcmp’, når værdien som returneres af denne funktion kun bruges til at kontrollere afslutningsstatus for operationen.
- Støtte til automatisk registrering af tråde er blevet tilføjet ved brug af systemopkaldet rseq (restartable sequences), som er tilgængeligt fra Linux-kernen 4.18. Systemopkaldet rseq muliggør uafbrudt udførelse af en gruppe instruktioner, som ikke afbrydes, og bekræfter resultatet af den sidste instruktion i gruppen. Dette giver i realiteten et middel til meget hurtig atomisk udførelse af operationer, som i tilfælde af afbrydelse af en anden tråd nulstilles og forsøges igen.
- En symbolsk link til /usr/bin/ld.so er blevet tilføjet.
- Standardopbygning for alle eksekverbare filer af indlejrede programmer og testsamlingen er blevet sikret i PIE (position independent executable) tilstand. For at deaktivere denne adfærd er der en mulighed for ‘—disable-default-pie’.
- For Linux er der tilføjet konfigurationen glibc.malloc.hugetlb, der muliggør skift af malloc-implementeringen til at bruge systemopkaldet madvise med flaget MADV_HUGEPAGE til mmap og sbrk eller direkte bruge store hukommelsessider ved at angive MAP_HUGETLB-flaget i mmap-opkaldene. I det første tilfælde kan man opnå bedre ydeevne, hvis Transparent Huge Pages bruges i madvise-tilstand, mens det i det andet tilfælde giver mulighed for at bruge de store sider (Huge Pages), der er reserveret af systemet.
- Funktionen _dl_find_object, som kan bruges til at tilføje oplysninger om stakudfoldning (unwind), er blevet tilføjet.
- Støtten til OpenRISC-arkitekturen (or1k-linux-gnu) er blevet tilføjet i soft-float tilstand. For at porten kan fungere, kræves binutils 2.35, GCC 11, og Linux-kernen 5.4.
- Byggeflaget ‘—with-rtld-early-cflags’ er blevet tilføjet, som gør det muligt at angive yderligere kompilationsflager, der anvendes ved opbygning af den indledende kode til dynamisk bindning.
- Funktionen epoll_pwait2 er blevet tilføjet til Linux-platformen, som adskiller sig fra epoll_wait ved at angive en timeout med nanosekunders nøjagtighed.
- Funktionen posix_spawn_file_actions_addtcsetpgrp_np er blevet tilføjet, som eliminerer race-tilstande ved opsætning af kontrolterminalen for den nye proces.
- For applications compiled with Glibc and GCC 12+, a protection mode "_FORTIFY_SOURCE=3" has been implemented, revealing potential buffer overflows during the execution of string functions defined in the header file string.h. The difference from mode "_FORTIFY_SOURCE=2" lies in the additional checks that may potentially lead to a decrease in performance.
- Support for Intel MPX (Memory Protection Extensions), used for pointer boundary checking of memory areas, has been discontinued (this technology has not gained traction and has already been removed from GCC and LLVM).
- The prelink mechanism and its associated environment variables LD_TRACE_PRELINKING and LD_USE_LOAD_BIAS have been deprecated and will be removed in the next release.
Sårbarheder udbedret:
- CVE-2022-23218, CVE-2022-23219 — buffer overflow in the functions svcunix_create and clnt_create, caused by copying the contents of a parameter named file without checking the size of the copied data onto the stack. For applications compiled without stack protection and using the "unix" protocol, this vulnerability may allow an attacker to execute arbitrary code when processing very long file names.
- CVE-2021-3998 — a vulnerability in the realpath() function, caused by returning an incorrect value under certain conditions that contains uncleaned leftover data from the stack. For the SUID-root program fusermount, this vulnerability can be exploited to obtain confidential information from the process's memory, such as information about pointers.
- CVE-2021-3999 — a single-byte buffer overflow in the getcwd() function. The problem originates from an error present since 1995. To trigger the overflow, it is sufficient to call chdir() for the directory "\/" in a separate namespace of mount points.
Kilde: opennet.ru
