Post ses monatoj da evoluo, la eldono de la GNU C-Biblioteko (glibc) 2.39 estas publikigita, kiu plene konformas al la postuloj de la normoj ISO C11 kaj POSIX.1-2017. La nova eldono inkluzivas korektojn de 67 programistoj.
Inter la plibonigoj efektivigitaj en Glibc 2.39 estas:
- Subteno por la ombra stako enkondukita en la kerno estis provizita. Linux 6.6, kiu blokas multajn ekspluataĵojn per utiligado de la aparataraj kapabloj de Intel-procesiloj por protekti kontraŭ anstataŭigo de la revenadreso de funkcio en kazo de staka bufrosuperfluo. Ĉi tiu protekto funkcias per konservado de revenadresoj ne nur sur la regula stako sed ankaŭ sur aparta "ombra" stako, kiu ne povas esti modifita rekte, post kiam kontrolo estas transdonita al funkcio. Antaŭ ol eliri el la funkcio, la revenadreso estas elprenita de la ombra stako kaj komparita kun la revenadreso de la ĉefa stako. Miskongruo en la adresoj generas escepton, blokante situaciojn kie ekspluato sukcesis anstataŭigi adreson sur la ĉefa stako. La konstruopcio "--enable-cet" estis aldonita por ebligi ĉi tiun protekton.
- Aldonita nova kapdosiero , difinita en la malneto ISO C2X-normo kaj inkluzive de la funkcioj stdc_leading_zeros, stdc_leading_ones, stdc_trailing_zeros, stdc_trailing_ones, stdc_first_leading_zero, stdc_first_leading_one, stdc_first_trailing_zero, stdc_trailing_zero, stdc_count_zero, stdc_count_zero tiaj, stdc_has _single_bit, stdc_bit_width, stdc_bit_floor kaj stdc_bit_ceil en variantoj kun tipoj "sensigna char", " unsigned short” , "unsigned long int", "unsigned long long int" kaj "unsigned long long int".
- Por la platformo Linux La funkcioj posix_spawnattr_getcgroup_np kaj posix_spawnattr_setcgroup_np, kaj ankaŭ la flago POSIX_SPAWN_SETCGROUP, estas efektivigitaj. Ĉi tiuj permesas agordi cgroupv2 en nova procezo uzante la funkciojn posix_spawn kaj posix_spawnp, eliminante konkurkondiĉojn. Ĉi tiuj funkcioj estas GNU-etendaĵoj kaj postulas la kernon por funkcii. Linux kun subteno de sistemvokoj de klono3.
- Por la platformo Linux La funkcioj pidfd_spawn kaj pidfd_spawp estas efektivigitaj, kiuj similas laŭ semantiko al la funkcio posix_spawn, sed redonas ne procezan identigilon (PID), sed dosierpriskribilon por uzo en funkcioj kiuj subtenas la PIDFD-mekanismon, kiel ekzemple pidfd_send_signal, poll, kaj waitid (PIDFD estas asociita kun specifa procezo kaj ne ŝanĝiĝas, dum PID povas esti asociita kun alia procezo post kiam la nuna procezo asociita kun ĉi tiu PID finiĝis).
- Por la platformo Linux Aldonis la funkcion pidfd_getpid por determini la procezan identigilon (PID) surbaze de la proceza dosierpriskribilo (PIDFD) resendita de la funkcioj pid_spawn, fork_np kaj pidfd_open.
- La grandmodifilo "wN" estis aldonita al la scanf-familiaj funkcioj, uzataj por argumentoj de tipoj intN_t, int_leastN_t, uintN_t kaj uint_leastN_t. Ekzemple, por legi dekumajn valorojn kun tipoj int32_t kaj int_least32_t, vi povas specifi "%w32d", kaj deksesumaj valoroj povas esti specifitaj kiel "%w32x". Simile, la "wfN" modifilo estis aldonita al la int_fastN_t kaj uint_fastN_t tipoj enkondukitaj en la skizo ISO C2X-normo.
- Aldonita la agordo "glibc.cpu.plt_rewrite", kiu ebligas reverki la PLT (Procedure Linkage Table) sur x86-64-sistemoj, en kiuj la ligilo anstataŭigos nerektajn branĉojn en la PLT per rektaj.
- Aldonita "glibc.mem.decorate_maps" agordo por aldoni pliajn memorajn asigno-informojn (kiel ekzemple la fadenstako kreita de pthread_create aŭ memoro asignita per malloc).
- La strukturo "statvfs" nun plenigas la kampon "f_type" per informoj pri la dosiersistema tipo, ekvivalente al la enhavo de la kampo en la strukturo "statfs". Antaŭe, Linux La kampo "f_type" ĉiam enhavis 0.
- Por la platformo AArch64, komentarioj estis aldonitaj al libmvec kaj math.h, kiuj ebligas, kiam oni specifigas la opcion "-ffast-math" dum konstruado, uzi vokvektoradon dum konstruado en GCC 9 kaj pli novaj versioj de la kompililo. Vektorizado estas ebligita por matematikaj funkcioj acos, acosf, asin, asinf, atan, atanf, atan2, atan2f, cos, cosf, exp, expf, exp10, exp10f, exp2, exp2f, expm1, expm1f, log, logf, log10, log10f, log1p , log1pf, log2, log2f, sin, sinf, tan kaj tanf.
- La libcrypt-biblioteko kaj la rilata kapdosiero estis forigitaj de la pakaĵo " " Aplikprogramistoj estas instigitaj ŝanĝi al alternativaj bibliotekoj kiel libxcrypt.
- La ldconfig ilo nun preterlasas dosierojn kun la signo ';'. en la dosiernomo aŭ finiĝanta per ".dpkg.tmp" kaj ".dpkg.new", kio ebligas al vi eviti prilabori provizorajn dosierojn de la rpm kaj dpkg pakadministrantoj.
- Subteno por la ia64-arkitekturo (ia64*-*-linux-gnu), uzita en Intel Itanium-procesoroj, estis nuligita.
- Riparitaj vundeblecoj:
- CVE-2023-6246, CVE-2023-6779, CVE-2023-6780 estas kritikaj vundeblecoj en la funkcio __vsyslog_internal(), kiuj permesas ekzekuti kodon kun altigitaj privilegioj per manipuladoj kun la lanĉo de SUID-aplikoj.
- CVE-2023-4911 estas vundebleco en Glibc ld.so, kiu permesas vin akiri radikajn privilegiojn en la sistemo. La vundebleco ŝuldiĝas al eraro en la ĉena analiza kodo specifita en la mediovariablo GLIBC_TUNABLES, kiu povas rezultigi la analizitan valoron skribitan ekster limoj en la asignita bufro. Estas laboraj heroaĵoj.
- CVE-2023-4806 estas uzado-post-libera vundebleco en la funkcio getaddrinfo. La problemo okazas kiam la NSS-kromaĵo nur efektivigas la "_gethostbyname2_r" kaj "_getcanonname_r" alvokojn, sed ne subtenas la "_gethostbyname3_r" alvokon. Por ekspluati la vundeblecon, la DNS-servilo devas resendi grandan nombron da IPv6 kaj IPv4-adresoj por la petita gastiganto, kio kondukos al la kraŝo de la procezo kiu vokis la getaddrinfo-funkcion por la familio AF_INET6 kiam la flagoj AI_CANONNAME, AI_ALL kaj AI_V4MAPPED estas. aro.
- CVE-2023-4527 estas vundebleco en la getaddrinfo-funkcio kiu permesas datumojn esti legitaj de areo ekster la bufrolimo dum prilaborado de DNS-respondo ricevita super TCP kiu estas pli granda ol 2048 bajtoj. La vundebleco okazas kiam oni uzas la opcion "no-aaaa" en /etc/resolv.conf.
Aldone, ni povas noti la liberigon de aro da sistemaj iloj GNU Binutils 2.42, kiu inkluzivas programojn kiel GNU-ligilo, GNU-asemblero, nm, objdump, strings, strip.
En la nova versio de Binutils:
- Eksperimenta opcio "--scfi=experimental" estis aldonita al asemblero (gaso) por x86-64-sistemoj por sintezi CFI (Control Flow Integrity) konstrukciojn por manskribita kunigkodo egalrilatanta al la System V AMD64 ABI.
- Aldonita "--extra-sym-info" opcio al readelf por montri plilongigitajn informojn pri simboloj ("-symbols"), kiel la nomo de la sekcio referencita de la st_shndx-indekso.
- La objcopy ilo disponigas la kapablon uzi la opcion "--set-section-flags" kun la "granda" valoro por agordi la SHF_X86_64_LARGE flagsekcion por ELF-objektoj sur x86-64 sistemoj. La opcio "--visualize-jups" efektivigas subtenon por la arkitekturo s390.
- Kiam oni malmuntas s390-instrukciojn, la kapablo montri komentojn en la priskribo de instrukcioj estis efektivigita. Por ebligi priskribojn, vi povas specifi la opcion "-M insndesc" en objdump, kaj la opcion "set disassembler-options insndesc" en gdb.
- Aldonitaj "-z mark-plt" kaj "-z nomark-plt" opcioj al la ligilo por marki enirojn en la PLT-tabelo uzante la etikedojn DT_X86_64_PLT, DT_X86_64_PLTSZ kaj DT_X86_64_PLTENT.
- Aldonita subteno por inversa ordigo al la ligilo.
- Aldonitaj "--warn-execstack-objects", "--error-execstack" kaj "--error-rxw-segments" opcioj por eligi avertojn aŭ erarojn kiam uzataj sur plenumeblaj stakaj objektoj.
- Subteno por ABI 2.30 de la LoongArch-arkitekturo estis efektivigita, same kiel subteno por novaj instrukcioj difinitaj en la LoongArch 1.10-specifo.
- Aldonita subteno por la KVX-instrukciaĵo uzita en Kalray-procesoroj (ekzemple, uzita en SoC Coolidge).
- Por sistemoj bazitaj sur Intel-arkitekturo, subteno por etendaĵoj estis aldonita:
- Intel APX: 32 GPR-oj, NDD, PUSH2/POP2, PUSHP/POPP.
- USER_MSR.
- AVX10.1.
- PBNDKB.
- SM4.
- SM3.
- SHA512.
- AVX-VNNI-INT16.
- Subteno por etendaĵoj estis aldonita al la arkitektura haveno RISC-V:
- T-kapo (XTheadVector, XTheadZvlsseg kaj XTheadZvamo).
- CORE-V (XCVmac, XCValu).
- SiFive VCIX (XSfVcp).
- Subteno por etendaĵoj estis aldonita al la haveno por la AArch64-arkitekturo:
- SVE2.1 (Skalebla Vektora Etendo 2.1).
- SME2.1 (Skalebla Matrico-Etendaĵo 2.1).
- B16B16 (BFloat16 kaj BFloat16 por SVE2 kaj SME2).
- RASv2 (Fiindeco, Havebleco kaj Serveblo v2).
- LSE128 (128-bita Atomo).
- GCS (Gardita Kontrolo Stac).
- CHK (Kontrolu Karakterizaĵan Statuson).
- SPECRES2 (Plifortigita Konjekto-Limigo).
- LRCPC3 (Ŝargi-Akiri RCpc).
- LA (Tradukado Harding).
- ITE (Instrukcia spuro).
- D128 (128-bitaj memorpaĝaj tabelpriskribiloj).
- XS (XS memora atributo).
- Aldonita subteno por AArch64 Cortex-A520, Cortex-A720, Cortex-X3 kaj Cortex-X4-procesoroj.
- Por kongruo kun la clang/LLVM-asemblero, la BPF-asemblero aldonis subtenon por apartigi komentojn kun la simboloj "#" kaj "//", kaj ankaŭ uzi la simbolon ";" por apartigi esprimojn ene de linio (";" ne plu uzeblas por komentoj).
fonto: opennet.ru
