Linuxカーネルにおいて、以下の脆弱性が修正されました。hwmon: (pmbus/adm1266) pmbus_block_xferの読み取りバッファにPECバイトを含める問題について、adm1266_pmbus_block_xfer() は読み取りトランザクションを以下のように設定しています。 .buf = data->read_buf, .len = ADM1266_PMBUS_BLOCK_MAX + 2,しかし、struct adm1266_data内のread_bufはu8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 1];と宣言されています。最大長ブロックレスポンスの場合(長さバイト=255 + 最大1バイトのPEC)、i2cコントローラは256バイトのバッファに257バイトを書き込むよう指示され、read_bufの末尾を1バイト超えてしまいます。同じレスポンスによって、その後のPEC比較 if (crc != msgs[1].buf[msgs[1].buf[0] + 1])においても配列の範囲外のバイトを読むことになります。このため、read_bufの宣言をADM1266_PMBUS_BLOCK_MAX + 2に増やし、長さバイト、最大255バイトのペイロード、そしてi2c_msgの長さが既に考慮しているPECバイトをバッファが保持できるように修正しました。
|