11.11. コンパイラーおよび開発ツール
glibc パッケージが更新され、アップストリームの 2.39 リリースからのバグ修正と機能拡張が追加されました
アップストリームの開発により、glibc 2.39 に対する複数のバグ修正と機能拡張が提供されました。その結果、RHEL 10 の glibc がアップストリームのリリースに比べて古くなり、機能のギャップとバグが未解決の状態が発生していました。この問題を解決するために、アップストリームの glibc 2.39 リリースブランチからの修正と機能拡張が、RHEL 10 にバックポートされました。その結果、RHEL 10 の glibc が、2025 年 8 月 20 日時点で、アップストリームの glibc 2.39 リリースブランチと同等の機能とバグを提供するようになりました。
glibc の動的リンカーを監査モードで実行しても、特定のプログラムがクラッシュしなくなりました
以前は、LD_AUDIT モードの glibc 動的リンカーは、リンカーがメインの malloc サブシステムを初期化する前に、メインの calloc 関数を使用して内部データ構造を割り当てることがありました。その結果、特定のプログラムが起動時に calloc 関数で予期せず終了していました。この更新により、プロセスの起動シーケンスが再調整され、起動時に内部の malloc 実装を使用して、メインの malloc 関数に切り替える前に calloc のメモリー割り当てが行われるようになりました。その結果、動的リンカーが監査モードの場合、プログラムが起動中に calloc 関数内でクラッシュしなくなりました。
Jira:RHEL-109703[1]
glibc の監査モジュールにおける再帰的な dlopen の呼び出しのサポートが強化されました
以前は、監査モジュールからの再帰的な dlopen の呼び出しにより、glibc の dl-open.c で、r_state == RT_CONSISTENT アサーションエラーが発生することがありました。その結果、監査モジュールがアクティブなときにアプリケーションが予期せず終了していました。この更新により、dlopen 呼び出しの実行中に、動的リンカーがその内部データ構造の整合性を、より早い段階で報告するようになりました。その結果、監査モジュールの再帰的な dlopen 操作が、より多くのケースでサポートされるようになりました。
glibc: ctype.h マクロが、複数の libc.so を持つマルチスレッドプログラムで、セグメンテーション違反を引き起こしていました
以前は、audit または dlmopen によって作成されたセカンダリー C ライブラリーコピー内の <ctype.h> の内部状態が、pthread_create で作成されたスレッドの初期化に失敗していました。その結果、セカンダリースレッドおよび名前空間で <ctype.h> の機能を直接的または間接的に使用すると、プログラムがクラッシュしていました。
この更新により、セカンダリースレッドおよび名前空間の C ロケールを参照するように、<ctype.h> の内部状態が初期化されるようになりました。その結果、上記のような状況で <ctype.h> 由来の機能を使用しても、クラッシュが発生しなくなりました。
glibc の NSS マージ処理で ERANGE が発生した場合でも、getent group コマンドが完全なメンバーリストを返すようになりました
この更新前は、Name Service Switch (NSS) が 2 つ以上のソースからのグループをマージするシステムで、内部バッファーが小さすぎるために、2 つのグループエントリー間のマージが失敗することがありました。このような場合、glibc は、より大きなバッファーを使用して再試行せずに、誤ってマージをスキップしていました。そのため、複数のグループデータベースがある環境でグループメンバーシップを照会すると、不完全な結果や空の結果が生成される場合がありました。
この更新により、glibc はマージの失敗を正しく処理し、適切なサイズのバッファーを使用して再試行するようになり、結果をスキップすることがなくなりました。そのため、グループが 2 つ以上のサービスからマージされた場合でも、グループメンバーシップの照会時にメンバーの完全なセットが確実に返されます。
Jira:RHEL-114264[1]
glibc の監査ロギングが、完全なオブジェクトライフサイクルの追跡を提供するようになりました
この更新前は、glibc の動的リンカーが、セカンダリー名前空間において、先に la_objopen を呼び出さずに、プロキシー ld.so リンクマップに対して la_objclose を呼び出していました。そのため、共有オブジェクトを追跡するために la_objopen に依存しているツールにとって、オブジェクトのライフサイクルに関する報告が不完全なものになっていました。
その結果、追跡を確立するために la_objopen に依存している監査ツールは、プロキシーリンクマップを確実に監視できませんでした。そのため、監視能力に不足が生じ、アンロードイベントが誤って解釈される可能性がありました。
このリリースでは、glibc の動的リンカーは、セカンダリー名前空間内のプロキシー ld.so を含め、該当するすべてのリンクマップに対して la_objopen イベントを生成します。これにより、監査インターフェイスのシーケンスの一貫性が確保されます。
その結果、監査ツールが、一貫した la_objopen および la_objclose イベントのペアを使用して、プロキシーリンクマップをそのライフサイクル全体にわたって追跡できるようになりました。これにより、監査ツールと診断の信頼性が向上します。