公開:

【CVE-2024-50144】Linuxカーネルのdrm/xeで重大な不具合を修正、デバイスの電力管理機能が向上へ

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


記事の要約

  • Linuxカーネルでdrm/xeのfence_fini()の不具合を修正
  • GuC CTのtlbリクエスト時のrpm put()バランス崩れを解消
  • デバイスの不要なサスペンド移行を防止する改善を実施

Linux kernelのdrm/xe fence_fini()不具合修正

LinuxカーネルコミュニティはGuC CTのtlbリクエスト送信時におけるfence_fini()の重複呼び出しによる不具合を修正し、2024年11月7日に公開した。この問題ではエラー発生時にfence_fini()が2回呼び出されることで、rpm put()の呼び出しバランスが崩れ、デバイスが不適切にサスペンド状態に移行する可能性があったのだ。[1]

この不具合は、スタックバージョンのフローでエラーパス時にcallerがfini()を呼び出すケースで発生しており、フェンスシグナラー側で既にfini()が呼ばれている状態での重複呼び出しが問題となっていた。修正により、フェンスシグナラー側のfini()呼び出しのみを残すことで、rpm参照カウントの適切な管理が可能になるだろう。

また、この修正はデバイスが適切なrpm参照を保持しているにもかかわらずスリープ状態に移行する不可解な問題の原因の一つである可能性が指摘されていた。修正により、デバイスの電力状態管理の信頼性が向上し、予期せぬサスペンド移行を防止できるようになった。

Linux kernelの不具合修正概要

項目 詳細
CVE ID CVE-2024-50144
影響を受けるバージョン Linux 6.11から6.11.5まで
修正コミット 046bd018c012、03a86c24aea0
修正内容 fence_fini()の重複呼び出しによるrpm put()バランス崩れの解消
改善効果 デバイスの不適切なサスペンド移行の防止

参照カウント管理について

参照カウント管理とは、システムリソースの使用状況を追跡するためのメカニズムで、主に以下のような特徴がある。

  • リソースの使用開始時にカウントを増加
  • リソースの使用終了時にカウントを減少
  • カウントが0になった時点でリソースを解放

Linuxカーネルのdrm/xeサブシステムでは、デバイスの電力状態管理にrpm (Runtime Power Management)の参照カウントを使用している。fence_fini()の重複呼び出しによってrpm put()が過剰に実行されると、参照カウントが不適切に減少してデバイスが予期せずサスペンド状態に移行する可能性が存在するのだ。

Linux kernelのdrm/xe不具合修正に関する考察

今回の修正はLinuxカーネルの電力管理システムの信頼性向上に重要な意味を持っており、特にデバイスドライバの開発においてrpm参照カウント管理の重要性を再認識させる結果となった。フェンスの初期化と終了処理の呼び出しタイミングを適切に制御することで、より安定したシステム動作が期待できるだろう。

しかし、複雑なエラーハンドリングパスにおける参照カウント管理は今後も課題となる可能性が高く、特にマルチスレッド環境での race condition の可能性について、より慎重な検証が必要となるだろう。開発者はエラーパスでのリソース解放処理の設計により注意を払う必要があるはずだ。

また、今回のような不具合はシステムの長時間運用時にのみ顕在化する可能性があり、そのデバッグや原因特定が困難を極める場合がある。そのため、参照カウントの変更を追跡・監視する仕組みの強化や、異常な状態遷移を検出するための診断機能の充実が望まれる。

参考サイト

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

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

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

コメントを残す

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