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

XNUMXか月の開発期間を経て 公開済み システムライブラリのリリース 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_lockjoin_np() 関数を追加しました (完了前にタイムアウトが発生した場合、関数はエラーを返します)。 とは異なり pthread_timedjoin_np()、 pthread_lockjoin_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()、および他の浮動小数点型の同様の関数は、状態内の値の変換に関する警告を排除するためにポインタを引数として受け入れるようになりました。 NaN、将来の C18661X 標準として提案されている TS 1-2 の推奨事項に従っています。
    浮動小数点引数を直接渡す既存の実行可能ファイルは、変更せずに引き続き実行されます。

  • 長い間非推奨となっていた stime 関数は、glibc にリンクされたバイナリでは使用できなくなり、その定義は time.h から削除されました。 システム時刻を設定するには、 Clock_settime 関数を使用します。 将来的には、非推奨の ftime 関数と sys/timeb.h ヘッダー ファイルを削除する予定です (ftime の代わりに gettimeofday または Clock_gettime を使用する必要があります)。
  • gettimeofday 関数は、システム全体のタイム ゾーンに関する情報を渡さなくなりました (この機能は 4.2-BSD の時代に関連しており、長年にわたって非推奨でした)。 'tzp' 引数には null ポインターを渡す必要があり、localtime() 関数を使用して現在時刻に基づいてタイム ゾーン情報を取得する必要があります。 ゼロ以外の 'tzp' 引数を指定して gettimeofday を呼び出すと、タイムゾーン構造体の空の tz_ minuteswest フィールドと tz_dsttime フィールドが返されます。 gettimeofday 関数自体は POSIX では非推奨になりました (gettimeofday の代わりに Clock_gettime が推奨されます) が、glibc から削除する予定はありません。
  • settimeofday は、時刻と時刻補正オフセットを設定するためのパラメーターの同時受け渡しをサポートしなくなりました。 settimeofday を呼び出すときは、引数 (時間またはオフセット) の XNUMX つを null に設定する必要があります。そうしないと、関数呼び出しは EINVAL エラーで失敗します。 gettimeofday と同様、settimeofday 関数は POSIX では非推奨となっており、 Clock_settime 関数または adjtime 関数ファミリーに置き換えることをお勧めします。
  • SPARC ISA v7 アーキテクチャのサポートは廃止されました (v8 サポートは現時点では維持されますが、SuperSPARC プロセッサではなく LEON プロセッサなど、CAS 命令をサポートするプロセッサのみが対象です)。
  • 「」でペアリングに失敗した場合怠惰な" では、リンカはその関数を最初に呼び出すまでその関数のシンボルを検索しませんでしたが、dlopen 関数はプロセスを強制的に終了するようになりました (以前は失敗時に NULL を返していました)。
  • MIPS ハードフロート ABI の場合、ビルドで「-enable-kernel=4.8」パラメーターを介して Linux カーネル 4.8.0 以降の使用を明示的に制限しない限り、実行可能スタックが使用されるようになりました (4.8 までのカーネルではクラッシュが発生します)。一部の MIPS 構成で観察されます)。
  • 時間操作に関連するシステム コールのバインディングは、time64 システム コール (存在する場合) を使用するように移動されました (32 ビット システムでは、glibc は最初に 64 ビットの時間型を操作する新しいシステム コールを試行し、存在しない場合は失敗します)古い 32 ビット呼び出しに戻ります)。

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

コメントを追加します