From de96d8ba06800d0422fa8d6940a984e89e4e1b00 Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Sat, 2 Mar 2024 23:38:46 +0300 Subject: [PATCH] one-based indexing enums is not cool Fixes possible out of array bounds introduced in 5af710ff73a0d9cd51e21478b3c665b803613b27 --- firmware/hw_layer/hardware.cpp | 3 ++- firmware/hw_layer/ports/at32/at32_spi.cpp | 3 ++- firmware/hw_layer/ports/cypress/mpu_util.cpp | 3 ++- firmware/hw_layer/ports/kinetis/mpu_util.cpp | 3 ++- firmware/hw_layer/ports/stm32/stm32_spi.cpp | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/firmware/hw_layer/hardware.cpp b/firmware/hw_layer/hardware.cpp index e37c06cc11..46daeca0a6 100644 --- a/firmware/hw_layer/hardware.cpp +++ b/firmware/hw_layer/hardware.cpp @@ -75,7 +75,8 @@ #endif #if HAL_USE_SPI -extern bool isSpiInitialized[SPI_TOTAL_COUNT]; +/* zero index is SPI_NONE */ +extern bool isSpiInitialized[SPI_TOTAL_COUNT + 1]; /** * Only one consumer can use SPI bus at a given time diff --git a/firmware/hw_layer/ports/at32/at32_spi.cpp b/firmware/hw_layer/ports/at32/at32_spi.cpp index 65fc89b925..db26fa5991 100644 --- a/firmware/hw_layer/ports/at32/at32_spi.cpp +++ b/firmware/hw_layer/ports/at32/at32_spi.cpp @@ -9,7 +9,8 @@ #include "pch.h" #if HAL_USE_SPI -bool isSpiInitialized[SPI_TOTAL_COUNT] = { false, false, false, false, false, false }; +/* zero index is SPI_NONE */ +bool isSpiInitialized[SPI_TOTAL_COUNT + 1] = { true, false, false, false, false, false, false }; struct af_pairs { brain_pin_e pin; diff --git a/firmware/hw_layer/ports/cypress/mpu_util.cpp b/firmware/hw_layer/ports/cypress/mpu_util.cpp index 9b9c40d528..0a4728328a 100644 --- a/firmware/hw_layer/ports/cypress/mpu_util.cpp +++ b/firmware/hw_layer/ports/cypress/mpu_util.cpp @@ -65,7 +65,8 @@ void HardFaultVector(void) { } #if HAL_USE_SPI || defined(__DOXYGEN__) -bool isSpiInitialized[SPI_TOTAL_COUNT] = { false, false, false, false, false, false }; +/* zero index is SPI_NONE */ +bool isSpiInitialized[SPI_TOTAL_COUNT + 1] = { true, false, false, false, false, false, false }; static int getSpiAf(SPIDriver *driver) { #if STM32_SPI_USE_SPI1 diff --git a/firmware/hw_layer/ports/kinetis/mpu_util.cpp b/firmware/hw_layer/ports/kinetis/mpu_util.cpp index 4b19c7922c..8a69b7eb7c 100644 --- a/firmware/hw_layer/ports/kinetis/mpu_util.cpp +++ b/firmware/hw_layer/ports/kinetis/mpu_util.cpp @@ -58,7 +58,8 @@ void HardFaultVector(void) { } #if HAL_USE_SPI || defined(__DOXYGEN__) -bool isSpiInitialized[SPI_TOTAL_COUNT] = { false, false, false, false, false, false }; +/* zero index is SPI_NONE */ +bool isSpiInitialized[SPI_TOTAL_COUNT + 1] = { true, false, false, false, false, false, false }; static int getSpiAf(SPIDriver *driver) { #if STM32_SPI_USE_SPI1 diff --git a/firmware/hw_layer/ports/stm32/stm32_spi.cpp b/firmware/hw_layer/ports/stm32/stm32_spi.cpp index 48573d5d3b..08acb3006a 100644 --- a/firmware/hw_layer/ports/stm32/stm32_spi.cpp +++ b/firmware/hw_layer/ports/stm32/stm32_spi.cpp @@ -9,7 +9,8 @@ #include "pch.h" #if HAL_USE_SPI -bool isSpiInitialized[SPI_TOTAL_COUNT] = { false, false, false, false, false, false }; +/* zero index is SPI_NONE */ +bool isSpiInitialized[SPI_TOTAL_COUNT + 1] = { true, false, false, false, false, false, false }; static int getSpiAf(SPIDriver *driver) { #if STM32_SPI_USE_SPI1