CVE-2026-64502 in Linux
要約
〜によって VulDB • 2026年07月26日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
iio: adc: ad_sigma_delta: レジスタレスデバイスにおける clear_pending_event の不具合を修正
`ad_sigma_delta_clear_pending_event()` は、`has_registers = false` かつ `rdy_gpiod` を持たないデバイスに対して、ステータスレジスタの読み込みパスへフォールスルーします。このようなデバイスでは、`ad_sd_read_reg()` がアドレスバイトを完全にスキップし、アドレスフェーズなしで生の MISO バイトをクロックするため、変換データの読み出しとバイト単位で同一になります。保留中の変換結果が存在する場合、これにより一部が消費され、`ad_sigma_delta_single_conversion()` 内の後続の `ad_sd_read_reg()` コールにおけるデータストリームが破損します。
さらに、これらのデバイスにおいて `num_resetclks = 0` の場合、`data_read_len` は 0 に評価されます。クロックされたバイトのビット7がクリアされていると、`pending_event` が設定され、コードは `memset(data + 2, 0xff, 0 - 1)` を実行しようとします。これにより SIZE_MAX までオーバーフローし、ヒープが破損します。
修正方法として、`rdy_gpiod` も `has_registers` もセットされていない場合に直ちに 0 を返すようにしました。これは現在のすべてのレジスタレスデバイスに対して安全です:ad7191 および ad7780(パワーダウン GPIO付き)は変換間で CS の非アサートによりリセットされるため、排水すべき古い結果はありません;ad7780(パワーダウン GPIOなし)および max11205 は連続変換モードであり、前回の結果が読み込まれたかどうかに関わらず出力データレートで ~DRDY をサイクルするため、次の立下ちは自然に発生します。
将来のレジスタレスデバイスで、~DRDY がデータが読み取られるまでアサートされたままになるものは、この早期リターンにより壊れ、`num_resetclks` の設定または rdy-gpio が必要になります。
rdy_gpiod はセットされているが `num_resetclks = 0` の任意のデバイスでも、同様のヒープ破損を引き起こす可能性があります:GPIO が保留イベントを示している場合、排水パスは `has_registers` に拘わらず `memset(data + 2, 0xff, 0 - 1)` を実行します。保留イベントチェックの後に明示的な `data_read_len == 0` ガードを追加し、古い結果を `ad_sigma_delta_single_conversion()` 内の最初の `ad_sd_read_reg()` コールで消費するようにしました。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.