Glibc 2.34 系統庫發布

經過六個月的開發,GNU C Library (glibc) 2.34系統庫已經發布,完全符合ISO C11和POSIX.1-2017標準的要求。 新版本包含 66 名開發人員的修復。

Glibc 2.34 中實作的一些改進包括:

  • libpthread、libdl、libutil 和 libanl 函式庫整合到主 libc 結構中,在應用程式中使用它們的功能不再需要使用 -lpthread、-ldl、-lutil 和 -lanl 標誌進行連結。 已經為將 libresolv 整合到 libc 中做好了準備。 整合將實現更無縫的 glibc 更新流程,並將簡化執行時間實作。 提供存根函式庫是為了向後相容使用舊版 glibc 建置的應用程式。 由於 glibc 中提供的結構和函數數量的擴展,在名稱與以前未使用的庫 libpthread、libdl、libutil、libresolv 和 libanl 存在交叉的應用程式中可能會出現問題。
  • 提供在傳統上使用 64 位元 time_t 類型的配置中使用 32 位元 time_t 類型的能力。 在此類配置中,例如在 x86 系統上,預設值仍然是 32 位元 time_t,但現在可以使用「_TIME_BITS」巨集來變更此行為。 此功能僅在 Linux 核心版本至少為 5.1 的系統上可用。
  • 新增了 _Fork 函數,取代 fork 函數,滿足「非同步訊號安全」的要求,即允許從信號處理程序安全地呼叫。 在 _Fork 執行期間,會建立一個足以呼叫訊號處理程序中的函數(例如 raise 和 execve)的最小環境,而不涉及可能變更鎖定或內部狀態的功能。 _Fork 呼叫將在 POSIX 標準的未來版本中定義,但目前它作為 GNU 擴充功能包含在內。
  • 對於Linux平台,已經實作了execveat函數,它允許您從開啟的檔案描述符執行可執行檔。 新函數也用於執行 fexecve 調用,該調用不需要在啟動時存在已掛載的偽 FS /proc。
  • 新增了 ISO C2X 標準草案中定義的 timespec_getres 函數,該函數擴展了 timespec_get 函數,具有類似於 POSIX Clock_getres 函數的功能。
  • 新增了 close_range() 函數,該函數允許進程一次關閉整個範圍的開啟檔案描述符。 該功能在 Linux 核心版本至少為 5.9 的系統上可用。
  • 新增 closefrom 和 posix_spawn_file_actions_addclosefrom_np 函數,允許一次關閉所有數量大於或等於指定值的檔案描述子。
  • 在「_DYNAMIC_STACK_SIZE_SOURCE」和「_GNU_SOURCE」模式下,PTHREAD_STACK_MIN、MINSIGSTKSZ 和 SIGSTKSZ 不再是常數,從而允許支援動態大小的暫存器集,例如 ARM SVE 擴充中提供的暫存器集。
  • 連結器實作「--list-diagnostics」選項來顯示與 IFUNC(間接函數)定義操作和 glibc-hwcaps 子目錄選擇相關的資訊。
  • 巨集 __STDC_WANT_IEC_60559_EXT__ 已實現,旨在檢查 ISO C2X 規範附錄 F 中定義的功能是否存在。
  • 對於 powerpc64* 系統,已實作「--disable-scv」選項,該選項可讓您在不支援 scv 指令的情況下建置 glibc。
  • gconv-modules 檔案中僅保留最小的核心 gconv 模組集,其餘部分將移至位於 gconv-modules.d 目錄中的附加檔案 gconv-modules-extra.conf 中。
  • 對於Linux平台,實作了glibc.pthread.stack_cache_size參數,可用來配置pthread堆疊快取的大小。
  • 頭檔中的 inet_neta 函數已被棄用,以及各種很少使用的功能(dn_count_labels、fp_nquery、fp_query、fp_resstat、hostalias、loc_aton、loc_ntoa、p_cdname、p_cdnname、p_class、p_fqname、p_fqnname、p_option、p_query、p_classr riesmatch、res_隨機數, sym_ntop 、 sym_ntos 、 sym_ston )和(ns_datetosecs、ns_format_ttl、ns_makecanon、ns_parse_ttl、ns_samedomain、ns_samename、ns_sprintrr、ns_sprintrrf、ns_subdomain)。 建議使用單獨的函式庫來處理 DNS,而不是使用這些函數。
  • 函數 pthread_mutex_concient_np、thread_mutexattr_getrobust_np、pthread_mutexattr_setrobust_np 和 pthread_yield 已被棄用,應使用 pthread_mutex_concient、thread_mutex
  • 停止使用符號連結將已安裝的共用物件綁定到 Glibc 版本。 這些物件現在按原樣安裝(例如,libc.so.6 現在是一個文件,而不是 libc-2.34.so 的連結)。
  • 預設情況下,malloc 中的偵錯功能會停用,例如MALLOC_CHECK_ (glibc.malloc.check)、mtrace() 和mcheck(),這些功能被移至單獨的庫libc_malloc_debug.so 中,過時的函數malloc_get_state 和malloc_set_state 也已移至該庫中被感動了。
  • 在 Linux 上,像 shm_open 和 sem_open 這樣的函數現在需要 /dev/shm 裝置才能運作。
  • 已修復的漏洞:
    • CVE-2021-27645:在處理特製的網路群組請求時,由於對 free 函數的雙重調用,nscd(名稱伺服器快取守護程序)進程崩潰。
    • CVE-2021-33574:將 SIGEV_THREAD 通知類型與設定了備用 CPU 關聯遮罩的執​​行緒屬性一起使用時,在 mq_notify 函數中存取已釋放的記憶體區域(釋放後使用)。 該問題可能會導致崩潰,但不能排除其他攻擊選項。
    • CVE-2021-35942:wordexp 函數中的參數大小溢位可能會導致應用程式崩潰。

來源: opennet.ru

添加評論