Linuxカーネルにおいて、以下の脆弱性が修正されました。hwmon:(pmbus/adm1266)blackbox-info バッファを I2C_SMBUS_BLOCK_MAX まで拡張しました。adm1266_nvmem_read_blackbox() は5バイトのスタックバッファを宣言し、4バイトのBLACKBOX_INFOレスポンスを取得するために i2c_smbus_read_block_data() に渡しています。i2c_smbus_read_block_data() は呼び出し元のバッファサイズを考慮せず、SMBusトランザクションから data.block[0] バイト(data.block[0] はスレーブデバイスが返す長さバイトで、最大は I2C_SMBUS_BLOCK_MAX = 32)を memcpy() でコピーします。memcpy(values, &data.block[1], data.block[0]); デバイスが5より大きいブロック長を返した場合、呼び出し元の5バイトスタックバッファをオーバーフローさせてしまい、その後の if (ret != 4) return -EIO; チェックが応答を拒否する前に、脆弱性が発生してしまいます。ローカルバッファを I2C_SMBUS_BLOCK_MAX まで拡大することで、このヘルパー関数は他のドライバー内の i2c_smbus_read_block_data() の呼び出し元と同様に、適切に形成されたあらゆるSMBusブロックレスポンスに対応できるようになりました。
|