CVE-2026-64504 in Linux情報

要約

〜によって VulDB • 2026年07月26日

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

iio: accel: bmc150: デバイスが報告するFIFOフレーム数を制限(clamp)する

__bmc150_accel_fifo_flush()関数は、デバイスがハードウェアFIFO内で報告するサンプルの数をスタック上のバッファにコピーします。

u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];

このバッファは最大でBMC150_ACCEL_FIFO_LENGTH(32)個のサンプル用にサイズ設定されています。フレーム数はFIFO_STATUSレジスタから読み取られ、有効な7ビットのみがマスクされます:

count = val & 0x7F;

そのため値は0〜127となり得ます。これに加え適用される唯一の制限は、呼び出し元によって指定されたオプションのサンプル予算です:

if (samples && count > samples) count = samples;

これはflush-allパス(samples == 0)ではcountを制約せず、またsamplesがより大きい値の場合でも32よりも十分に大きなままにしておきます。その後、count個のサンプルがbuffer[]へ転送されます:

bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);

bmc150_accel_fifo_transfer()関数はregmapを通じてcount * 6バイトを読み取ります。そのため、最大で127フレームを報告する故障した悪意のあるまたは偽造された加速度センサー(あるいはI2C/SPIバスに干渉する攻撃者)が存在する場合、192バイトのバッファに対して最大762バイトが書き込まれることになります。これはスタックカニィー、保存済みレジスタおよびリターンアドレスを破壊する可能性のある、最大570バイトのスタック外境界書き込み(stack out-of-bounds write)となります。

転送前にcountをBMC150_ACCEL_FIFO_LENGTHに制限し、buffer[]がサイズ設定されているサンプル数に合わせて調整します。これはbmc150_accel_set_watermark()関数で既に実施されているウォーターマークの制限処理と同様です。正常なflushでは最大でもBMC150_ACCEL_FIFO_LENGTHフレームしか報告されないため、正規のデバイスには影響がありません。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-383299

EPSS

0.00220

アクティビティ

中間

ソース

Do you need the next level of professionalism?

Upgrade your account now!