公開:

【CVE-2024-53054】Linuxカーネルのcgroup/bpfにデッドロックの脆弱性、専用ワークキューで修正へ

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


記事の要約

  • Linuxカーネルのcgroup/bpfに重大な不具合が発見
  • マルチタスク処理時にデッドロックが発生する問題を確認
  • 専用ワークキューを使用することで問題を解決

Linuxカーネルのcgroup/bpfに関する重要な脆弱性が発見

Linuxカーネルの開発チームは2024年11月19日、cgroup/bpfコンポーネントにおいて深刻なhung_task問題が発生することを公表した。この問題は【CVE-2024-53054】として報告され、大量のcpusetが削除される状況下でシステムがデッドロック状態に陥る可能性があることが判明している。[1]

問題の根本的な原因は、cgroup_mutexとcpu_hotplug_lockが異なるタスクで取得されることにより、特定の条件下でデッドロックが発生する点にある。具体的には、大量のcpusetの削除処理時にsystem_wqがcgroup_bpf_releaseワークで満杯になることで、新規のワークがブロックされる状況が確認された。

この脆弱性は、cpusetの大量削除とCPUのオン・オフ切り替え、watchdog_threshの設定を組み合わせることで再現可能であることが示されている。開発チームはこの問題に対し、cgroup_bpf_release処理を専用のワークキューで実行することで、デッドロックの発生を防ぐ修正を実装した。

Linuxカーネルの脆弱性対策まとめ

項目 詳細
CVE番号 CVE-2024-53054
影響を受けるバージョン Linux 5.3から6.1.116未満、6.6.60未満、6.11.7未満
問題の症状 system_wqの飽和によるデッドロック
再現条件 cpusetの大量削除、CPU on/off切り替え、watchdog_thresh設定の組み合わせ
修正方法 cgroup_bpf_release用の専用ワークキューを実装

デッドロックについて

デッドロックとは、複数のプロセスが互いに相手が保持するリソースを要求し合い、どのプロセスも進行できない状態に陥ることを指す。以下のような特徴が挙げられる。

  • 複数のプロセスが互いにリソースを占有したまま待機
  • システムの処理が完全に停止する可能性がある
  • プロセス間の依存関係による循環待ちが発生

Linuxカーネルのcgroup/bpf問題では、system_wqの処理待ちとcpu_hotplug_lockの取得待ちが循環的に発生することでデッドロックが引き起こされている。この状況では、cgroup_mutexの取得を試みるプロセスも含めて複数のプロセスが永久に待機状態となる可能性が高い。

Linuxカーネルのcgroup/bpf問題に関する考察

system_wqを使用したcgroup_bpf_releaseの実装は、汎用的なワークキューを利用する点で理にかなっていたものの、大量の処理が集中した際のリスクが見過ごされていた。専用ワークキューを実装することで問題は解決されるが、同様のリソース競合の問題が他のコンポーネントでも潜在している可能性を示唆している。

今後はsystem_wqの使用に関するガイドラインの整備と、大規模な処理を行う際のリソース管理の見直しが必要となるだろう。特に、コンテナ技術の普及によってcgroupの使用が増加している現状を考えると、より堅牢なリソース管理の仕組みが求められている。

また、この問題はカーネルの複雑化に伴うリスクも浮き彫りにしている。マルチタスク処理の信頼性向上には、ロック機構の見直しやデッドロック検出機能の強化が不可欠だ。今後のカーネル開発では、パフォーマンスと信頼性のバランスを慎重に検討する必要があるだろう。

参考サイト

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

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

「セキュリティ」に関するコラム一覧「セキュリティ」に関するニュース一覧
ブログに戻る

コメントを残す

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