From 5f3fe509a4d42bfabbaa31d07b34ca760a734a99 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 31 Dec 2019 18:37:09 -0600 Subject: [PATCH] Fix unbounded array access in Aura RAM detection that caused segfaults on certain systems --- .../AuraController/AuraControllerDetect.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Controllers/AuraController/AuraControllerDetect.cpp b/Controllers/AuraController/AuraControllerDetect.cpp index cb2088b0..355954f2 100644 --- a/Controllers/AuraController/AuraControllerDetect.cpp +++ b/Controllers/AuraController/AuraControllerDetect.cpp @@ -113,14 +113,19 @@ void DetectAuraControllers(std::vector &busses, std::vecto AuraController temp_controller(busses[bus], 0x77); - // Search through available addresses and skip over ones that are already in use - res = busses[bus]->i2c_smbus_write_quick(aura_ram_addresses[address_list_idx], I2C_SMBUS_WRITE); - - while (res >= 0) + do { address_list_idx++; - res = busses[bus]->i2c_smbus_write_quick(aura_ram_addresses[address_list_idx], I2C_SMBUS_WRITE); - } + + if(address_list_idx < AURA_RAM_ADDRESS_COUNT) + { + res = busses[bus]->i2c_smbus_write_quick(aura_ram_addresses[address_list_idx], I2C_SMBUS_WRITE); + } + else + { + break; + } + } while (res >= 0); temp_controller.AuraRegisterWrite(AURA_REG_SLOT_INDEX, slot); temp_controller.AuraRegisterWrite(AURA_REG_I2C_ADDRESS, (aura_ram_addresses[address_list_idx] << 1));