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

2.34 か月の開発を経て、ISO C11 および POSIX.1-2017 標準の要件に完全に準拠した GNU C ライブラリ (glibc) 66 システム ライブラリがリリースされました。 新しいリリースには、XNUMX 人の開発者による修正が含まれています。

Glibc 2.34 で実装された改善点には次のようなものがあります。

  • libpthread、libdl、libutil、および libanl ライブラリは、メインの libc 構造に統合されており、アプリケーションでこれらの機能を使用する場合、-lpthread、-ldl、-lutil、および -lanl フラグを使用したリンクは必要なくなりました。 libresolv を libc に統合する準備が整いました。 統合により、よりシームレスな glibc 更新プロセスが可能になり、ランタイム実装が簡素化されます。 スタブ ライブラリは、古いバージョンの glibc で構築されたアプリケーションとの下位互換性を提供するために提供されています。 glibc で提供される構造と関数の数が拡張されたため、以前は使用されていなかった libpthread、libdl、libutil、libresolv、および libanl ライブラリと名前が重複するアプリケーションで問題が発生する可能性があります。
  • 従来 64 ビットの time_t 型を使用していた構成で 32 ビットの time_t 型を使用できる機能を提供します。 このような構成 (x86 システムなど) では、デフォルトは依然として 32 ビット time_t ですが、この動作は「_TIME_BITS」マクロを使用して変更できるようになりました。 この機能は、Linux カーネル バージョン 5.1 以上を搭載したシステムでのみ使用できます。
  • 「async-signal-safe」の要件を満たす fork 関数の代替となる _Fork 関数を追加しました。 シグナル ハンドラーからの安全な呼び出しを可能にします。 _Fork の実行中に、ロックや内部状態を変更する可能性のある機能を含まずに、raise や execve などのシグナル ハンドラー内の関数を呼び出すのに十分な最小限の環境が作成されます。 _Fork 呼び出しは POSIX 標準の将来のバージョンで定義される予定ですが、現時点では GNU 拡張機能として含まれています。
  • Linux プラットフォームの場合、execveat 関数が実装されており、開いているファイル記述子から実行可能ファイルを実行できるようになります。 新しい関数は、fexecve 呼び出しの実装でも使用され、起動時に擬似 FS /proc をマウントする必要はありません。
  • ISO C2X 標準草案で定義されている timespec_getres 関数が追加されました。これは、POSIX の Clock_getres 関数と同様の機能で timespec_get 関数を拡張します。
  • close_range() 関数を追加しました。これにより、プロセスは開いているファイル記述子の全範囲を一度に閉じることができます。 この機能は、少なくともバージョン 5.9 の Linux カーネルを搭載したシステムで利用できます。
  • closefrom 関数と posix_spawn_file_actions_addclosefrom_np 関数を追加しました。これにより、指定された値以上の数のすべてのファイル記述子を一度に閉じることができます。
  • 「_DYNAMIC_STACK_SIZE_SOURCE」および「_GNU_SOURCE」モードでは、PTHREAD_STACK_MIN、MINSIGSTKSZ、および SIGSTKSZ は定数ではなくなり、ARM SVE 拡張機能で提供されるような動的サイズのレジスタ セットのサポートが可能になります。
  • リンカーは、「--list-diagnostics」オプションを実装して、IFUNC (間接関数) 定義操作および glibc-hwcaps サブディレクトリの選択に関連する情報を表示します。
  • マクロ __STDC_WANT_IEC_60559_EXT__ が実装されており、ISO C2X 仕様の付録 F で定義されている関数の存在をチェックするように設計されています。
  • powerpc64* システムの場合、「--disable-scv」オプションが実装されており、scv 命令をサポートせずに glibc をビルドできるようになります。
  • コア gconv モジュールの最小セットのみが gconv-modules ファイルに残され、残りは gconv-modules.d ディレクトリにある追加ファイル gconv-modules-extra.conf に移動されます。
  • Linux プラットフォームの場合、glibc.pthread.stack_cache_size パラメーターが実装されており、これを使用して pthread スタック キャッシュのサイズを構成できます。
  • ヘッダー ファイルの inet_neta 関数は非推奨になりました、およびまれに使用されるさまざまな機能(dn_count_labels、fp_nquery、fp_query、fp_resstat、hostalias、loc_aton、loc_ntoa、p_cdname、p_cdnname、p_class、p_fqname、p_fqnname、p_option、p_query、p_rcode、p_time、p_type、putlong、putshort、res_hostalias、res_isourserver、res_name inクエリ、res_queriesmatch、res_randomid、 sym_ntop 、 sym_ntos 、 sym_ston) および(ns_datetosecs、ns_format_ttl、ns_makecanon、ns_parse_ttl、ns_samedomain、ns_samename、ns_sprintrr、ns_sprintrrf、ns_subdomain)。 これらの関数の代わりに、DNS を操作するための別のライブラリを使用することをお勧めします。
  • 関数 pthread_mutex_consistent_np、thread_mutexattr_getrobust_np、pthread_mutexattr_setrobust_np、および pthread_yield は非推奨となり、代わりに pthread_mutex_consistent、thread_mutexattr_getrobust、hread_mutexattr_setrobust、および sched_yield を使用する必要があります。
  • インストールされた共有オブジェクトを Glibc バージョンにバインドするためのシンボリック リンクの使用を停止しました。 このようなオブジェクトはそのままインストールされるようになりました (たとえば、libc.so.6 は libc-2.34.so へのリンクではなくファイルになりました)。
  • デフォルトでは、MALLOC_CHECK_ (glibc.malloc.check)、mtrace()、および mcheck() などの malloc のデバッグ機能は無効になっており、これらは別のライブラリ libc_malloc_debug.so に移動され、廃止された関数 malloc_get_state および malloc_set_state もこのライブラリに含まれています。移動された。
  • Linux では、shm_open や sem_open などの関数が動作するために /dev/shm デバイスが必要になりました。
  • 修正された脆弱性:
    • CVE-2021-27645: nscd (ネームサーバー キャッシュ デーモン) プロセスは、特別に細工されたネットグループ リクエストを処理する際に free 関数への二重呼び出しが原因でクラッシュします。
    • CVE-2021-33574: 代替 CPU アフィニティ マスクが設定されているスレッド属性を持つ SIGEV_THREAD 通知タイプを使用する場合、mq_notify 関数で既に解放されたメモリ領域 (解放後の使用) へのアクセス。 この問題はクラッシュにつながる可能性がありますが、他の攻撃オプションも排除できません。
    • CVE-2021-35942: wordexp 関数のパラメーター サイズのオーバーフローにより、アプリケーションがクラッシュする可能性があります。

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

コメントを追加します