公開:

【CVE-2024-50296】Linux kernelのhns3ドライバでNULLポインタ参照の脆弱性、デバイスロックによる修正で安定性向上へ

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


記事の要約

  • Linuxカーネルでhns3ドライバのアンインストール時にクラッシュ発生
  • pci_disable_sriov()の重複呼び出しによるリソース解放の問題
  • デバイスロックの追加によりVF無効化の競合を解決

Linux kernel hns3ドライバのクラッシュ問題とその修正

Linux kernelの開発チームは2024年11月19日、hns3ドライバのアンインストール時にカーネルがクラッシュする脆弱性【CVE-2024-50296】の修正を公開した。この問題はドライバのアンインストールとVFの無効化が同時に実行された際にpci_disable_sriov()関数が重複して呼び出されることで発生し、既に解放されたリソースに再度アクセスしようとすることでNULLポインタ参照を引き起こしていたのだ。[1]

カーネルクラッシュの具体的な症状として、仮想アドレス0x0000000000000020でのNULLポインタ参照が発生し、コールトレースにはklist_put、device_del、pci_remove_bus_deviceなどの関数呼び出しが記録されていた。この問題は特にSR-IOV機能を使用する環境で深刻な影響を及ぼす可能性があったのである。

開発チームは問題の解決策として、ドライバ削除時にdevice_lock()を使用してnum_VFsを保護する方法を実装した。sriov_numvfs_store()と同様のロック機構を導入することで、VF関連のリソース解放処理の競合を防ぎ、システムの安定性が大幅に向上している。

Linux kernel hns3ドライバの影響バージョン

バージョン 状態
Linux 5.15 影響あり
Linux 4.19.324以降 影響なし
Linux 5.4.286以降 影響なし
Linux 5.10.230以降 影響なし
Linux 5.15.172以降 影響なし
Linux 6.1.117以降 影響なし
Linux 6.6.61以降 影響なし
Linux 6.11.8以降 影響なし

NULLポインタ参照について

NULLポインタ参照とは、プログラムがメモリアドレス0を指すポインタにアクセスしようとすることで発生する深刻なプログラミングエラーのことを指す。主な特徴として、以下のような点が挙げられる。

  • メモリアドレス0へのアクセスによりシステムクラッシュを引き起こす
  • 解放済みのメモリや未初期化のポインタで発生しやすい
  • カーネルモードでの発生時はシステム全体に影響を及ぼす

Linuxカーネルにおいて、NULLポインタ参照は特に重大な問題となる。カーネルモードで実行されるドライバコードでNULLポインタ参照が発生すると、システム全体がクラッシュする可能性があり、データ損失やサービス停止などの深刻な影響をもたらす可能性があるためだ。

Linux kernel hns3ドライバの脆弱性に関する考察

hns3ドライバの脆弱性修正は、マルチスレッド環境下でのリソース管理の重要性を改めて示している。SR-IOV機能を使用する仮想化環境では、物理デバイスと仮想機能の間でリソースの適切な管理が不可欠であり、今回のようなロック機構の導入は並行処理における安全性を確保する上で重要な施策となるだろう。

今後は同様の問題を未然に防ぐため、ドライバ開発時のリソース管理に関するガイドラインの強化が求められる。特にリソースの解放処理については、複数のコンポーネントが関与する場合の競合条件を考慮した設計が必要不可欠だ。

また、カーネルの品質保証プロセスにおいて、並行処理に関するテストケースの拡充も検討すべきである。SR-IOV機能のように複雑な機能を持つドライバでは、エッジケースでの動作検証が重要となっているのだ。

参考サイト

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

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

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

コメントを残す

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