の打ち上げ 新しいカーネルのバージョン Linux 6.13 は遅れています 安定性の問題のため 生成された Microsoft 従業員によって導入された変更によるものです。 この変更は、通常の慣行に従っていなかったため、多くの人を驚かせた形で昨年 11 月にメイン ブランチで受け入れられたと述べられています。
パッチが標準以外の方法で送信されました x86 アーキテクチャのメンテナのピアによる確認応答 (ACK) を受信せずに承認されました。これは、カーネル開発で受け入れられている標準への違反となります。
導入された問題のパッチ サポート ROXモードで大きなメモリページを使用する場合 (読み取り専用および実行可能) 実行可能コード用にメモリを割り当てるとき、および送信されたパッチの目的は次のとおりです。 脆弱性の悪用を困難にすることでシステムのセキュリティを強化します。 読み取り専用としてマークされたメモリ内で悪意のあるコードを実行することによって。
大きなページを使用してテキスト領域をマップすると、iTLB の負荷が軽減され、パフォーマンスが向上します。
execmem_alloc() を拡張して、ROX 権限を持つ大きなページを小規模な割り当てのキャッシュとして使用できるようにしました。キャッシュを埋めるために、大きな書き込み可能なページが VM_ALLOW_HUGE_VMAP を使用して vmalloc から割り当てられ、無効な命令で埋められてから、ROX として再マップされます。
その大きなページのダイレクト マップ エイリアスは、ダイレクト マップから除外されます。その大きなページの一部は、権限を変更することなく execmem_alloc() の呼び出し元に与えられます。 execmem_free() でメモリが解放されると、古い命令が含まれないようにメモリは再び無効化されます。
遅れが指摘されている カーネル 6.13 リリースでは なぜなら モードで大規模な実行可能メモリ ページ キャッシュを使用する ROX は x86_64 システム上のモジュールに対してデフォルトで有効になっていました。この変更により、まだ完全に準備されていない実行可能コードに対する ROX モードでのページの割り当てという主要な技術的問題が解決されました。
これにより、一時的にページを再割り当てする必要がなくなりました。 カーネルモジュールの実行準備が整うまで、ROX モードから書き込みモードに移行します。ただし、期待される利点にもかかわらず、特定された安定性の問題によりパッチの品質とセキュリティに疑問が生じ、最終リリース前にテストを延長する必要性が生じています。
そして、Linux 6.13 カーネルの最終テスト段階で、Intel のエンジニアが、開発者の判断は間違っていないようです。 重大な問題を検出しました その 一部のラップトップ上のシステムの動作に影響を与える Alderlake マイクロアーキテクチャに基づいたプロセッサを搭載しています。この問題は、カーネルをスリープ モードから復帰させようとしたときに発生し、特にモバイル デバイスに関連する障害でした。
x86: EXECMEM_ROX サポートを無効にする
module_writable_address() は大きな混乱を引き起こしました。
言うまでもなく、alternative.c には依然としてバグが含まれており、そのうちのいくつかは注目に値します。
CFI の亜種は何度も失敗します。マイクはこれをすべてきれいにするためのパッチに取り組んでいますが、現在の状況を考えると、まだ準備ができていません。
とりあえず無効にして、次のサイクルでもう一度試してみましょう。
カーネルのコンパイル時に問題が発生しました Clang コンパイラを使用した場合 CFI保護モードを有効にします (制御フローの整合性)。このモードは、メモリ内の関数ポインタを変更する攻撃などで発生する制御フローの不適切な操作をブロックすることでセキュリティを強化するように設計されています。ただし、CFI と、ROX (読み取り専用および実行可能) メモリ ページを処理するためにカーネルに導入された新しい最適化との間の相互作用には問題があることが判明しました。
メカニズム EXECMEM_ROX、 これにより、読み取り専用としてマークされた実行可能メモリ ページのキャッシュを使用できるようになります。 これが、システムの再アクティブ化時に観察された障害の根本原因であると考えられます。 一時的な解決策として、x86 アーキテクチャを担当する Intel と AMD のメンテナは、カーネル バージョン 6.13 で EXECMEM_ROX を無効にすることを提案しました。これにより、安定性やセキュリティを損なうことなく問題を解決する最終的なパッチの作成中にカーネルをリリースできるようになります。