From 3eeff9e388528af60fd5c39d04e076a70830f7c5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 21 Aug 2022 22:31:52 -0400 Subject: [PATCH] Lua CAN bus index: let's fail if invalid value specified --- firmware/controllers/lua/can_filter.cpp | 5 +++++ firmware/hw_layer/drivers/can/can_hw.cpp | 7 +++++++ firmware/hw_layer/drivers/can/can_hw.h | 4 ++++ unit_tests/Makefile | 1 + 4 files changed, 17 insertions(+) diff --git a/firmware/controllers/lua/can_filter.cpp b/firmware/controllers/lua/can_filter.cpp index 2970fba75a..0a042bbd52 100644 --- a/firmware/controllers/lua/can_filter.cpp +++ b/firmware/controllers/lua/can_filter.cpp @@ -1,5 +1,6 @@ #include "pch.h" #include "can_filter.h" +#include "can_hw.h" static constexpr size_t maxFilterCount = 48; @@ -26,6 +27,10 @@ void resetLuaCanRx() { } void addLuaCanRxFilter(int32_t eid, uint32_t mask, int bus, int callback) { + if (bus != ANY_BUS) { + assertHwCanBusIndex(bus); + } + if (filterCount >= maxFilterCount) { firmwareError(OBD_PCM_Processor_Fault, "Too many Lua CAN RX filters"); } diff --git a/firmware/hw_layer/drivers/can/can_hw.cpp b/firmware/hw_layer/drivers/can/can_hw.cpp index b3630d6d53..7c3cd37bcb 100644 --- a/firmware/hw_layer/drivers/can/can_hw.cpp +++ b/firmware/hw_layer/drivers/can/can_hw.cpp @@ -334,3 +334,10 @@ bool getIsCanEnabled(void) { } #endif /* EFI_CAN_SUPPORT */ + +void assertHwCanBusIndex(const size_t busIndex) { + // 'size_t' is an unsigned type so we are never below zero here + if (busIndex > 1) { + firmwareError(CUSTOM_OBD_70, "Invalid HW CAN bus index %d", busIndex); + } +} diff --git a/firmware/hw_layer/drivers/can/can_hw.h b/firmware/hw_layer/drivers/can/can_hw.h index 8674267009..6b3b5c33e4 100644 --- a/firmware/hw_layer/drivers/can/can_hw.h +++ b/firmware/hw_layer/drivers/can/can_hw.h @@ -19,7 +19,11 @@ void stopCanPins(); void startCanPins(); void enableFrankensoCan(); bool getIsCanEnabled(void); + #if EFI_TUNER_STUDIO void postCanState(); #endif /* EFI_TUNER_STUDIO */ + #endif /* EFI_CAN_SUPPORT */ + +void assertHwCanBusIndex(const size_t busIndex); diff --git a/unit_tests/Makefile b/unit_tests/Makefile index e848d5f44a..d2f97c14d4 100644 --- a/unit_tests/Makefile +++ b/unit_tests/Makefile @@ -34,6 +34,7 @@ CPPSRC += $(ALLCPPSRC) \ $(DEVELOPMENT_DIR)/engine_sniffer.cpp \ $(CONSOLE_COMMON_SRC_CPP) \ $(PROJECT_DIR)/config/boards/hellen/hellen_board_id.cpp \ + $(PROJECT_DIR)/hw_layer/drivers/can/can_hw.cpp \ $(PROJECT_DIR)/../unit_tests/logicdata.cpp \ $(PROJECT_DIR)/../unit_tests/native/native_impl.cpp \ $(PROJECT_DIR)/../unit_tests/main.cpp \