CVE-2025-39901 in Linux情報

要約

〜によって VulDB • 2026年06月14日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

i40e: debugfsファイルへの読み取りアクセスを削除する

「command」および「netdev_ops」といったdebugfsファイルは、コミット 02e9c290814c("i40e: debugfs interface")以来、初期の頃からi40eドライバによってサポートされているレガシーなデバッグインターフェースです。

これらの両方のdebugfsファイルには、主に無用であり、実装に疑問が残るロジックを持つ読み取りハンドラが提供されています。これらはどちらも空文字列で初期化された静的256バイトのバッファを使用しています。「command」ファイルの場合、このバッファは実際には一切使用されず、単に領域を浪費しているだけです。「netdev_ops」ファイルの場合、最後に書き込まれたコマンドがこのバッファに保存されます。

読み取り時、ファイルの内容はデバイス名にコロン(:)を付けた後に、それぞれの静的バッファの内容が続く形で表示されます。「command」の場合は常に「<device>: 」となります。「netdev_ops」の場合は「<device>: <最後に書き込まれたコマンド>」となりますが、このバッファはこのモジュールによって操作されるすべてのデバイス間で共有されている点に注意してください。最善の場合でもこれはほとんど意味のない情報であり、悪くするとロックメカニズムが存在しないため、同時にアクセスされる可能性があります。

また、最近では両方の読み取り関数において、snprintfの使用と、それにより任意のカーネルメモリを読み取る可能性のあるオーバーフローについて複数の報告を受けました。「command」ファイルの場合、静的バッファは常にゼロで初期化され、書き込まれないため、これは確実に不可能です。「netdev_ops」ファイルの場合、ユーザーがコマンド入力を注意深く作成すれば可能です。その場合、入力内容はバッファにコピーされますが、このバッファのサイズによりsnprintfによる切り捨てが発生し、その後copy_to_userによってkzallocで割り当てられたバッファの長さを超えて読み取りが行われる可能性があります。

最小限の修正としては、snprintf()をscnprintf()に置き換えることが挙げられます。これにより戻り値が書き込まれたバイト数に制限され、オーバーフローを防ぐことができます。より包括的な修正としては、主に無用な静的バッファを取り除き(512バイト節約)、読み取り関数がそれらを入力として必要としないように変更することが挙げられます。

代わりに、これらのファイルへの読み取りアクセスを完全に削除します。これらはdebugfsの一部として公開されているデバッグインターフェースであり、提供される出力がほとんど無用であるため、読み取りアクセスの削除によってスクリプトが壊れることはないと考えています。デバイス名はより標準的な他のインターフェースを通じて取得でき、「netdev_ops」インターフェースでは複数のデバイスに対して同時に書き込みを行うとゴミデータが発生する可能性があります。

i40e_dbg_netdev_ops_bufを適切に削除するためには、静的バッファの使用を避けるようにその書き込み関数をリファクタリングする必要があります。代わりに、i40e_dbg_command_writeと同じロジックを使用し、割り当てられたバッファを利用します。コードを更新してこの方式を採用し、終了時にバッファを解放することを保証します。これにより、「netdev_ops」に対する複数のデバイスへの同時書き込みが修正され、使用されなくなった静的バッファの削除と読み取りアクセスの除去が可能になります。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2025年04月16日

モデレーション

承諾済み

エントリ

VDB-326466

EPSS

0.00143

アクティビティ

非常低い

ソース

Do you know our Splunk app?

Download it now for free!