7.11. コンパイラーおよび開発ツール


glibc DNS スタブリゾルバーが、同じトランザクション ID で並列クエリーを正しく処理

今回の更新以前は、GNU C ライブラリー glibc の DNS スタブリゾルバーは、同じトランザクション ID を持つ並列クエリーへの応答を処理しませんでした。そのため、トランザクション ID が等しい場合、2 番目の並列応答がクエリーと一致せず、タイムアウトおよび再試行が生じました。

今回の更新で、2 つ目の並列応答が有効と認識されるようになりました。その結果、glibc DNS スタブリゾルバーは、認識されない応答による過剰なタイムアウトを回避します。

(BZ#1868106)

fgetsgent() および fgetsgent_r() で設定ファイルの読み取りがより堅牢になりました。

/etc/gshadow ファイルで特に構造化エントリー、または読み込み時のファイルサイズの変更によって、fgetsgent() および fgetsgent_r() 関数が無効なポインターを返すことがありました。そのため、これらの関数を使用して /etc/gshadow、または /etc/ 内のその他の設定ファイルをセグメンテーションフォールトで読み取り、失敗していました。今回の更新で fgetsgent() および fgetsgent_r() が変更され、設定ファイルの読み込みがより堅牢となりました。その結果、アプリケーションが正常に設定ファイルを読み取るようになりました。

(BZ#1871397)

glibc 文字列は、AMD64 および Intel 64 プロセッサーのシステムキャッシュに悪影響を及ぼさなくなりました。

以前では、文字列関数の glibc の実装は、64 ビット AMD および Intel プロセッサーのスレッドで利用可能な最終レベルのキャッシュを誤って予測していました。その結果、大規模なバッファーで memcpy 関数を呼び出すと、システムの全体的なキャッシュパフォーマンスに影響を与えるか、memcpy システムコールの速度が低下していました。

今回の更新で、システム内で報告されたハードウェアスレッド数で、最後のレベルのキャッシュサイズがスケーリングされなくなりました。その結果、文字列関数が大規模なバッファーのキャッシュをバイパスし、残りのシステムキャッシュに悪影響を及ぼさなくなりました。

(BZ#1880670)

glibc 動的ローダーが、libc.so.6 の特定の失敗を回避するようになりました。

以前は、libc.so.6 共有オブジェクトがメインプログラム (glibc バージョン情報を表示するなど) として実行されると、glibc 動的ローダーは、LD_PRELOAD 環境変数を使用してロードされたオブジェクトに関連する libc.so.6 を正しく再配置しませんでした。そのため、LD_PRELOAD が設定されている場合、libc.so.6 を呼び出すと、libc.so.6 がセグメンテーションフォールトで予期せずに終了することがありました。今回の更新でバグが修正され、動的ローダーが libc.so.6 の再配置を正しく処理するようになりました。その結果、上記の問題が発生しなくなりました。

(BZ#1882466)

glibc 動的リンカーが、静的スレッドローカルストレージ領域の一部を静的 TLS 割り当てに制限するようになりました。

以前は、glibc 動的リンカーは、動的 TLS に利用可能なすべての静的スレッドローカルストレージストレージ (TLS) 空間を最初に使用していました。そのため、動的 TLS の割り当てで、利用可能なすべての静的 TLS 領域の消費がすでに使用されているため、dlopen 関数を使用してランタイム時に追加の共有オブジェクトを読み込むことが失敗することがありました。この問題は、特に 64 ビット ARM アーキテクチャーおよび IBM Power Systems で発生しました。

動的リンカーは、静的 TLS 領域の一部を静的 TLS 割り当てに制限し、動的 TLS の最適化にこの領域を使用しなくなりました。これにより、dlopen 呼び出しは、デフォルト設定でより多くのケースで成功します。デフォルト設定よりも多くの静的 TLS を必要とするアプリケーションでは、新しい glibc.rtld.optional_static_tls 調整可能パラメーターを使用できます。

(BZ#1871396)

glibc 動的リンカーが、64 ビット ARM バリアント呼び出し規則の Lazy binding を無効にするようになりました。

以前は、glibc 動的リンカーは、64 ビット ARM(AArch64) バリアント呼び出し規則を使用して、関数の Lazy バインディングを無効にしませんでした。その結果、このような関数呼び出しにおける動的リンカーの破損した引数により、誤った結果やプロセスが失敗する可能性がありました。今回の更新で、上記のシナリオで動的リンカーがレイジーバインディングを無効にし、関数の引数が正しく渡されるようになりました。

(BZ#1893662)

gcc がバージョン 8.4 にリベースされました。

GNU コンパイラーコレクション (GCC) がアップストリームバージョン 8.4 にリベースされ、以前のバージョンにバグ修正が数多く追加されました。

(BZ#1868446)

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.