Glibc 2.35 システム ライブラリのリリース

2.35 か月の開発を経て、ISO C11 および POSIX.1-2017 標準の要件に完全に準拠した GNU C ライブラリ (glibc) 66 システム ライブラリがリリースされました。 新しいリリースには、XNUMX 人の開発者による修正が含まれています。

Glibc 2.35 で実装された改善点には次のようなものがあります。

  • 「C.UTF-8」ロケールのサポートが追加されました。これには、すべての Unicode コードの照合規則が含まれますが、スペースを節約するために、fnmatch、regexec、および regcomp 関数での ASCII 範囲の使用に制限されます。ロケールは約 400 KB で、そのうち 346 KB は Unicode の LC_CTYPE データであり、別個のインストールが必要です (Glibc には組み込まれていません)。
  • Unicode 14.0.0 仕様をサポートするために、エンコード データ、文字タイプ情報、および音訳テーブルが更新されました。
  • でそして結果をより狭い型に丸める関数とマクロが実装されています: fsqrt、fsqrtl、dsqrtl、ffma、ffmal、dfmal、fMsqrtfN、fMsqrtfNx、fMxsqrtfN、fMxsqrtfNx、fMfmafN、fMfmafNx、fMxfmafN、および fMxfmafNx。機能は仕様 TS 18661-1:2014、TS 18661-3:2015 で説明されており、将来の ISO C2X C 標準のドラフトに追加されます。
  • でそしてfloat、long double、_FloatN、_FloatNx 型の浮動小数点数の最小値と最大値を見つけるための関数とマクロが実装されており、IEEE 754-2019 仕様に記載され、将来の ISO C2X C 標準のドラフトに追加されました: fmaximum、fmaximum_num 、fmaximum_mag、fmaximum_mag_num、fminimum、fminimum_num、fminimum_mag、fminimum_mag_num。
  • で単精度浮動小数点数の定数を追加しました: M_Ef、M_LOG2Ef、M_LOG10Ef、M_LN2f、M_LN10f、M_PIf、M_PI_2f、M_PI_4f、M_1_PIf、M_2_PIf、M_2_SQRTPIf、M_SQRT2f、および M_SQRT1_2f。
  • ヘッダーファイルの関数exp10の場合特定のタイプに関連付けられていない対応するマクロを追加しました。
  • でISO C2X 標準草案で提案されている _PRINTF_NAN_LEN_MAX マクロを追加しました。
  • 整数をバイナリ表現で出力するために、printf ファミリの関数に「%b」および「%B」形式指定子が追加されました。
  • 動的リンク システムは、深さ優先検索 (DFS) を使用する新しい DSO ソート アルゴリズムを実装し、ループされた依存関係を処理する際のパフォーマンスの問題に対処します。 DSO ソート アルゴリズムを選択するには、glibc.rtld.dynamic_sort パラメーターが提案されます。これを「1」に設定すると、古いアルゴリズムにロールバックできます。
  • ABI は、新しい関数 '__memcmpeq' のサポートを追加しました。この関数は、この関数によって返される値が操作の完了ステータスをチェックするためだけに使用される場合に、コンパイラーによって 'memcmp' の使用を最適化するために使用されます。
  • Linux カーネル 4.18 以降で提供される rseq (再起動可能シーケンス) システム コールを使用してスレッドを自動的に登録するためのサポートが追加されました。 rseq システム コールを使用すると、中断されない命令グループの継続的な実行を組織化し、グループ内の最後の命令によって結果を確認できます。基本的に、これは、別のスレッドによって中断された場合にクリーンアップされて再試行される操作を非常に高速にアトミックに実行するための手段を提供します。
  • シンボリックリンク /usr/bin/ld.so を追加しました。
  • 組み込みプログラムのすべての実行可能ファイルと PIE (位置独立実行可能) モードのテスト セットのデフォルト アセンブリが提供されます。この動作を無効にするために、「--disable-default-pie」オプションが提供されています。
  • Linux の場合、glibc.malloc.hugetlb 設定が追加され、mmap および sbrk の MADV_HUGEPAGE フラグを使用して madvise システム コールを使用するように malloc 実装を切り替えるか、mmap で MAP_HUGETLB フラグを指定して大きなメモリ ページを直接使用できるようになります。呼び出します。最初のケースでは、透明なヒュージ ページを Madvise モードで使用するとパフォーマンスの向上が得られ、2 番目のケースでは、システムで予約されたヒュージ ページを使用する機能が提供されます。
  • コールスタックのアンワインド情報を追加するために使用できる _dl_find_object 関数を追加しました。
  • ソフトフロートモードでの OpenRISC アーキテクチャ (or1k-linux-gnu) のサポートが追加されました。このポートには、binutils 2.35、GCC 11、および Linux カーネル 5.4 が必要です。
  • ビルド フラグ「--with-rtld-early-cflags」を追加しました。これにより、動的リンクの初期コードをビルドするときに使用される追加のコンパイル フラグを指定できます。
  • Linux プラットフォームの場合、epoll_pwait2 関数が追加されました。この関数は、ナノ秒精度でタイムアウトを指定する点で epoll_wait とは異なります。
  • 新しいプロセスの制御端末を設定するときに競合状態を排除するために、posix_spawn_file_actions_addtcsetpgrp_np 関数を追加しました。
  • Glibc および GCC 12+ でコンパイルされたアプリケーションの場合、「_FORTIFY_SOURCE=3」保護モードが実装されており、string.h ヘッダー ファイルで定義された文字列関数の実行時に発生する可能性のあるバッファ オーバーフローを検出します。 「_FORTIFY_SOURCE=2」モードとの違いは、追加のチェックにあり、パフォーマンスの低下につながる可能性があります。
  • メモリ境界のポインタをチェックするために使用される Intel MPX (Memory Protection Extensions) のサポートは廃止されました (このテクノロジは普及しておらず、すでに GCC および LLVM から削除されています)。
  • プレリンク メカニズムとそれに関連する環境変数 LD_TRACE_PRELINKING および LD_USE_LOAD_BIAS は非推奨となり、将来のリリースでは削除される予定です。

    修正された脆弱性:

    • CVE-2022-23218、CVE-2022-23219 – svcunix_create および clnt_create 関数でのバッファ オーバーフロー。コピーされたデータのサイズを確認せずに filename パラメーターの内容をスタックにコピーすることが原因で発生します。スタック保護なしで「unix」プロトコルを使用して構築されたアプリケーションの場合、この脆弱性により、非常に長いファイル名を処理するときに攻撃者のコードが実行される可能性があります。
    • CVE-2021-3998 は、特定の条件下で、スタックからクリーンにされていない残留データを含む不正な値が返されることによる、realpath() 関数の脆弱性です。 SUID-root fusermount プログラムの場合、この脆弱性を利用してプロセス メモリから機密情報を取得できます (たとえば、ポインタに関する情報を取得するなど)。
    • CVE-2021-3999 - getcwd() 関数でのシングルバイト バッファ オーバーフロー。この問題は、1995 年から存在するバグが原因で発生します。オーバーフローを発生させるには、別のマウント ポイント名前空間の「/」ディレクトリで chdir() を呼び出すだけです。

    出所: オープンネット.ru

コメントを追加します