Glibc 2.31 系統庫發布

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

來自 Glibc 2.31 中實現的 改進 你可以注意:

  • 新增了 _ISOC2X_SOURCE 巨集以啟用未來 ISO 標準草案中定義的功能 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 中的 trust-ad 選項和 _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() 和其他浮點類型的類似函數現在都採用指標作為參數,以消除有關在狀態中轉換值的警告 N,依照TS 18661-1為未來C2X標準提出的建議。
    直接傳遞浮點參數的現有可執行檔將繼續運行,無需修改;

  • 長期棄用的 stime 函數不再可用於 glibc 連結的二進位文件,並且其定義已從 time.h 中刪除。 若要設定係統時間,請使用clock_settime函數。 將來,我們計劃刪除已棄用的 ftime 函數,以及 sys/timeb.h 頭檔(應使用 gettimeofday 或clock_gettime 來取代 ftime);
  • gettimeofday 函數不再傳遞有關係統範圍內時區的資訊(此功能在 4.2-BSD 時代是相關的,並且已被棄用多年)。現在應該向「tzp」參數傳遞一個空指針,並且應該使用 localtime() 函數來獲取基於當前時間的時區資訊。使用非零參數「tzp」呼叫 gettimeofday 將在時區結構中傳回空白欄位 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 硬浮點 ABI,現在使用可執行堆疊,除非建置透過「-enable-kernel=4.8」參數明確限制 Linux 內核 4.8.0+ 的使用(對於 4.8 以下的內核,崩潰是在某些MIPS 配置中觀察到);
  • 與時間操作相關的系統呼叫周圍的綁定已移至使用 time64 系統呼叫(如果存在)(在 32 位元系統上,glibc 首先嘗試使用新的系統呼叫來操作 64 位元類型的時間,如果存在無,退回到舊的32 位元呼叫)。

來源: opennet.ru

添加評論