Glibc 2.34には、脆弱性の修正、Linux用の新機能などが付属しています。

Glibc 2.34の新バージョンが先日リリースされました。6ヶ月の開発期間を経てリリースされたこのバージョンには、libpthread、libdl、libutil、libanlライブラリの追加をはじめとするいくつかの重要な変更点に加え、クラッシュの原因となっていたバグを含む様々なバグ修正が含まれています。

Glibcをご存知ない方のために説明すると、これはGNU Cライブラリの一種で、一般的にglibcと呼ばれ、GNU C言語の標準ランタイムライブラリです。このCライブラリは、システムコールやその他の基本関数を提供・定義しており、使用されているシステムではほぼすべてのプログラムで利用されています。

Glibc2.34の主な新機能

この新しいバージョンの Glibc 2.34 では、メインライブラリである libpthread、libdl、libutil、および libanl が統合されました。アプリケーションでこれらのライブラリの機能を使用する際に、-lpthread、-ldl、-lutil、および -lanl のインジケータを使用してリンクする必要がなくなりました。

さらに、libresolvをlibcに統合するための準備が進められており、これによりglibcのアップグレードプロセスがスムーズになり、ランタイム実装が簡素化されることが述べられています。また、以前のバージョンのglibcを使用して構築されたアプリケーションとの互換性を確保するために、スタブライブラリも提供されています。

Glibc 2.34におけるLinux向けの変更点の中で最も注目すべきは、従来32ビットのtime_t型を使用していた構成で、64ビットのtime_t型を使用できるようになった点です。この機能は、カーネルバージョン5.1以降のシステムでのみ利用可能です。

Linux特有のもう一つの変更点は、開いているファイルディスクリプタから実行可能ファイルを実行できる`execveat`関数の実装です。この新しい関数は、起動時に擬似ファイルシステム`/proc`をマウントする必要のない`fexecve`呼び出しの実装にも使用されています。

また、 Linux 5.9以降で利用可能なclose_range() 関数が追加されました。この関数を使用すると、プロセスが開いているファイルディスクリプタの範囲全体を一度に閉じることができます。さらに、pthread スタックキャッシュのサイズを調整できる glibc.pthread.stack_cache_size パラメータが実装されました。

さらに、 ` fork`関数に代わる `_Fork` 関数が追加されました。これは「非同期シグナルセーフ」要件を満たしており、シグナルハンドラから安全に呼び出すことができます。`_Fork` の実行中は、ロックや内部状態を変更する可能性のある機能を呼び出すことなく、`raise` や `execute` などのシグナルハンドラ内の関数を呼び出すのに十分な最小限の環境が形成されます。

Glibc 2.34で修正された脆弱性の一部について、以下が言及されています。

CVE-2021-27645:特別に細工されたネットワークグループ要求の処理中に、free 関数が二重に呼び出されたことにより、nscd プロセス (ネームサーバー キャッシング デーモン) が失敗する。

CVE-2021-33574:代替CPUバインディングマスクが設定されたスレッド属性でSIGEV_THREAD通知タイプを使用している場合、mq_notify関数内の解放済みメモリ領域へのアクセスが脆弱性となります。この問題によりクラッシュが発生する可能性がありますが、他の攻撃方法も排除されません。

CVE-2021-35942: wordexp関数におけるパラメータサイズのオーバーフローにより、アプリケーションがクラッシュする可能性があります。

その他の注目すべき変更点は以下のとおりです。

  • ドラフトISOC2X標準で定義されているtimespec_getres関数が追加され、timespec_get関数がPOSIXclock_getres関数と同様の機能で拡張されました。
  • gconv-modulesファイルでは、メインのgconvモジュールの最小限のセットのみが残り、残りはgconv-modules.dディレクトリにある追加のgconv-modules-extra.confファイルに移動されました。
  • インストール可能な共有オブジェクトをGlibcバージョンにリンクするためのシンボリックリンクの使用は削除されました。 これらのオブジェクトはそのままインストールされます(たとえば、libc.so.6はlibc-2.34.soへのリンクではなくファイルになりました)。
  • Linuxでは、shm_openやsem_openなどの関数で、/ dev / shmマウントポイントにマウントされた共有メモリ用のファイルシステムが必要になりました。

最後に、この新バージョンについてさらに詳しく知りたい場合は、以下のリンクから詳細をご確認いただけます。


Googleで優先ソースとして追加する