CVE-2026-64191 in Linux
要約
〜によって VulDB • 2026年07月20日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
i2c: stub: 無効な長さのI2Cブロック転送を拒否する
stub_xfer()におけるI2C_SMBUS_I2C_BLOCK_DATAケースは、データ長としてdata->block[0]を使用しています。既存の確認処理では、chip->words[256]レジスタ配列への書き込みオーバーランを防ぐためにこれを制限していますが、union i2c_smbus_data.blockバッファの上限であるI2C_SMBUS_BLOCK_MAX(34バイト合計)に対しては検証されていません。このドライバは開発/テスト用のツールであり(CONFIG_I2C_STUB=m、デフォルトではビルドされない)、chip_addr=パラメータを指定してロードする必要があります。
/dev/i2c-*へのアクセス権を持つローカルユーザーは、data->block[0] > 32となるI2C_SMBUS_I2C_BLOCK_DATAおよびデータを含むI2C_SMBUS ioctlを発行でき、これによりstub_xfer()がunion i2c_smbus_data.blockバッファの末尾を超えて読み書きを行う可能性があります:
BUG: KASAN: stack-out-of-bounds in stub_xfer (drivers/i2c/i2c-stub.c:223) Read of size 1 at addr ffff88800abcfd92 by task exploit/81 Call Trace: stub_xfer (drivers/i2c/i2c-stub.c:223) __i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:593) i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:536) i2cdev_ioctl_smbus (drivers/i2c/i2c-dev.c:391) i2cdev_ioctl (drivers/i2c/i2c-dev.c:478) __x64_sys_ioctl (fs/ioctl.c:583) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
このバグは、i2c-stubがI2C_SMBUS_BLOCK_MAXの検証をi2c_smbus_xfer_emulated()で回避し、.smbus_xferを直接実装しているために存在します。同じ関数内のI2C_SMBUS_BLOCK_DATAケースではI2C_SMBUS_BLOCK_MAXに対して正しく検証されていますが、I2C_SMBUS_I2C_BLOCK_DATAケースではその検証が行われていません。
修正方法:data->block[0] == 0 または data->block[0] > I2C_SMBUS_BLOCK_MAX の転送を -EINVAL で拒否します。これは、同じ関数内のI2C_SMBUS_BLOCK_DATAケースおよびi2c_smbus_xfer_emulated()におけるI2C_SMBUS_I2C_BLOCK_DATAの検証と整合性のある対応です。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.