12.9. コンパイラーおよび開発ツール
Red Hat Enterprise Linux 10.2 でコンパイラーと開発ツールに関して修正された問題点を確認してください。
glibc-locale-sourceにおける圧縮ロケール文字マップの gzip 依存関係の欠落を修正しました今回のアップデート以前は、
glibc-locale-sourceパッケージは文字マップをgzip圧縮形式で提供していましたが、gzipパッケージへの依存関係は宣言していませんでした。その結果、システムにgzipがインストールされていない場合、圧縮アーカイブを展開できないため、glibc-locale-sourceが提供する文字マップでlocaledefを使用すると失敗する可能性がありました。今回のリリースにより、
glibc-locale-sourceはgzipパッケージに依存するようになりました。この変更により、必要な圧縮ユーティリティーが確実に存在し、localedefが文字マップを正しく処理できるようになります。その結果、以前はgzipが欠落していたシステムにおいても、glibc-locale-sourceが提供する文字マップを使用したlocaledefの使用が期待どおりに動作するようになりました。
- glibc の exit 関数が同時呼び出しでクラッシュしなくなりました
今回のアップデート以前は、マルチスレッドアプリケーションにおいて、glibc の
exit関数への同時呼び出しとstdio.hストリーム操作の同時実行が同期されていませんでした。その結果、アプリケーションが予期せず終了したり、データが破損したりする可能性がありました。今回のアップデートにより、exit関数とquick_exit関数は、stdio.hストリームの処理を同期するようになり、1 つの終了呼び出しのみが実行されるようになります。その結果、このシナリオではアプリケーションがクラッシュしなくなり、全体的な信頼性が向上します。getcharなどを使用してstdio.hストリームに対してブロッキング読み取り操作を実行するアプリケーション、またはflockfileを使用してストリームをロックするアプリケーションは、読み取り操作が完了するかロックが解除されるまで終了できません。この動作は POSIX 標準で規定されています。Jira:RHEL-111117[1]
- NSS グループのマージが ERANGE エラーで失敗した場合、glibc はグループメンバーシップの完全な結果を返すようになりました
今回のアップデート以前は、Name Service Switch (NSS) が 3 つ以上のサービスからグループをマージするシステムでグループメンバーシップを検索する際、内部バッファーが不足しているために 2 つのグループ間のマージが失敗したことが原因で、glibc はより大きなバッファーを使用して操作を再試行する代わりに、マージ結果をスキップしていました。
その結果、3 つ以上のグループデータベースソースを持つシステムでは、
getentgroup コマンドなどを使用してグループ情報をクエリーすると、グループメンバーシップの結果が不完全になったり、場合によっては空の状態で返されたりすることがありました。今回のアップデートにより、glibc は内部バッファーの不足が原因で発生したマージの失敗をスキップしなくなり、代わりに意図どおり、より大きなバッファーを使用してマージを再試行するようになりました。
その結果、複数のグループデータベースソースを持つシステムにおけるグループメンバーシップの検索では、完全かつ正確なグループメンバーシップデータが返されるようになりました。
Jira:RHEL-114265[1]
- 存在しないセマフォを開こうとした際に、
sem_openから未初期化の結果が返される問題を修正しました 今回のアップデート以前は、存在しない名前付きセマフォに対して、
O_CREATフラグを指定せずにsem_open関数を呼び出すと、定義済みのエラーインジケーターではなく、未初期化の値が返されることがありました。その結果、影響を受けたアプリケーションでは、無効なセマフォハンドルを使用しようとしたり、errno が意味のある値に設定されていないためにエラーを誤って解釈したりするなど、未定義の動作が発生しました。
今回のリリースでは、存在しないセマフォに対して
O_CREATフラグを指定せずに呼び出した場合、sem_openは明示的にSEM_FAILEDを返し、errnoにENOENTを設定するようになりました。その結果、アプリケーションはこのエラー状態を確実に検出し、存在しないセマフォに対しても、予測可能かつ標準に準拠した方法で対処できるようになりました。
Jira:RHEL-119392[1]
- 入力ストリームおよび共有ファイル記述子における
glibcの stdio フラッシュに関する問題が修正されました 今回のアップデート以前は、glibc の標準 I/O 実装は、入力ストリームをフラッシュする際に POSIX に完全に準拠していませんでした。これにより、
ungetc実行後の入力ストリームに対してfflushが誤動作するほか、fflush(NULL)として呼び出した際の挙動の不一致、さらに共有ファイル記述子や特殊文字デバイスに対してfcloseを実行した際のファイルオフセットの誤正などが発生していました。その結果、アプリケーションは、メモリーマップされた入力ファイルに対して
fseekとfflushを使用する際に、入力ストリームの状態に予期しない矛盾が生じたり、基礎となるファイル位置が不正確になったり、ファイルポジショニングエラーが発生したりすることがありました。これにより、データの誤読み取りや、特定が困難なデータ処理上のバグを引き起こす可能性がありました。今回のリリースでは、
glibcstdio ライブラリーが修正され、ungetcの後やfflush(NULL)として呼び出された場合も含め、fflushが POSIX に準拠した方法で入力ストリームを処理するようになりました。さらに、fcloseは共有ファイル記述子の基盤となるファイルオフセットを更新し、特殊文字デバイスでも正常に動作するようになりました。また、メモリーマップされた入力ファイルに対するfseekおよびfflushのファイル位置制御ロジックも修正されました。その結果、入力処理、共有ファイル記述子の使用、またはメモリーマップされた入力ファイルのために
stdioに依存するアプリケーションは、アップデート後、予測可能かつ正しく動作するようになりました。Jira:RHEL-119434[1]
glibcNSS データベース検索の安定性が向上しました今回のアップデート以前は、
glibcパッケージの__nss_database_get関数においてチェック処理が不足していたため、Name Service Switch (NSS) データベースの検索中に null ポインター逆参照やアサーションの失敗が発生する可能性がありました。その結果、NSS に依存するアプリケーションが予期せず終了したり、特定の検索条件下で C ライブラリーがクラッシュしたりする恐れがありました。今回のリリースでは、無効な内部状態や予期しない内部状態を安全に処理するために、
glibcの NSS データベース検索パスにバリデーションチェックが追加されました。その結果、NSS データベースの検索がより堅牢になり、システムの安定性が向上しました。
- 検索パスが
.に設定されている場合に、DNS クエリーが重複する問題を修正しました 今回のアップデート以前は、
/etc/resolv.confファイルの Domain Name System (DNS) 検索パスに単一の.エントリーが含まれている場合、glibcDNS スタブリゾルバーは、元のドメイン名と末尾にドットが付いた同じドメイン名の両方をクエリーしていました。その結果、存在しないドメインに対する DNS クエリーが重複し、DNS サーバーへの負荷が増加しました。
今回のアップデート後、
glibcDNS スタブリゾルバーは、検索パスに単一の.エントリーのみが含まれている場合、ドメイン名の末尾にドットを追加しなくなりました。これにより、この設定では DNS クエリーの重複がなくなり、不要な DNS トラフィックとサーバー負荷が軽減されました。