【CVE-2024-50140】Linux kernelのスケジューラーコアにおけるページ割り当ての問題を修正、システムの安定性向上へ

text: XEXEQ編集部
(記事は執筆時の情報に基づいており、現在では異なる場合があります)


記事の要約

  • Linux kernelのスケジューラーコアで深刻な問題を修正
  • KASAN有効時のtask_tick_mm_cid()での問題を解決
  • 新しいTWAF_NO_ALLOCフラグを追加して対処

【CVE-2024-50140】Linux kernelのtask_tick_mm_cid()におけるページ割り当ての問題を修正

Linux kernelの開発チームは、スケジューラーコアにおけるtask_tick_mm_cid()関数の重大な問題に対処するパッチを2024年11月7日に公開した。KASANとPREEMPT_RTが有効な環境下でtask_work_add()を呼び出した際にスピンロックの不適切な使用によってシステムがクラッシュする可能性があることが判明している。[1]

この問題は、Linux kernel v6.4で導入されたコミット223baf9d17f2に起因しており、rqロックの保持中にページ割り当てが発生することで深刻なシステムの不安定性を引き起こす可能性がある。スピンロックの使用中にスリープ状態に入ることができないという制約に違反し、カーネルのロック機構に重大な影響を及ぼすだろう。

開発チームは問題の解決策としてTWAF_NO_ALLOCフラグを新たに導入し、kasan_record_aux_stack_noalloc()を使用するように修正を行った。このアプローチによってページ割り当ての問題は解消されるが、KASANレポートにおいてスタックトレースが欠落する可能性があることが指摘されている。

Linux kernelの影響を受けるバージョンまとめ

項目 詳細
影響を受けるバージョン Linux kernel 6.4以降の特定バージョン
修正済みバージョン Linux kernel 6.6.59、6.11.6以降
パッチ公開日 2024年11月7日
最終更新日 2024年11月19日
必要な条件 KASANとPREEMPT_RTが有効

スピンロックについて

スピンロックとは、マルチプロセッサシステムにおける同期制御機構の一つで、共有リソースへのアクセスを制御するための重要な仕組みである。主な特徴として、以下のような点が挙げられる。

  • CPUがロック解放待ちの間、ビジーループで待機する
  • コンテキストスイッチが発生しない同期制御を実現
  • 短時間のロックに適した軽量な同期機構

Linux kernelにおいてスピンロックは特にスケジューラーやタイマー処理など、クリティカルセクションが短い処理で重要な役割を果たす。raw_spinlock_tは割り込み禁止状態を維持しながらロックを取得するため、スリープ状態に入ることができず、ページ割り当てのような時間のかかる処理との組み合わせには注意が必要だ。

Linux kernelのスケジューラー改善に関する考察

スケジューラーコアの改善は、システムの安定性と性能に直接的な影響を与える重要な取り組みである。今回のパッチでは、ページ割り当ての問題に対して新しいフラグを導入することで柔軟な解決策を提供しているが、KASANレポートのスタックトレース欠落という新たな課題も浮上しているため、継続的な監視と改善が必要になるだろう。

今後はKASANとPREEMPT_RTの組み合わせにおけるパフォーマンスとデバッグ機能のバランスが重要な検討課題となる。システムの安定性を確保しながら、デバッグツールの機能を最大限に活用できる方法を模索し、開発者とユーザーの双方にとって使いやすい環境を整備することが望まれるだろう。

また、スケジューラーの改善においては、マルチコアシステムでの性能最適化やリアルタイム性能の向上など、より広範な課題に取り組む必要がある。特に組み込みシステムやクラウド環境など、異なるユースケースに対応できる柔軟な設計が求められるため、コミュニティ全体での活発な議論と開発が期待される。

参考サイト

  1. ^ CVE. 「CVE Record | CVE」. https://www.cve.org/CVERecord?id=CVE-2024-50140, (参照 24-11-27).

※上記コンテンツはAIで確認しておりますが、間違い等ある場合はコメントよりご連絡いただけますと幸いです。

「プログラミング」に関するコラム一覧「プログラミング」に関するニュース一覧
ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。