Skip to content

Commit 2e98b1f

Browse files
henrikbrixandersencfriedt
authored andcommitted
drivers: can: be consistent in filter_id checks when removing rx filters
Change the CAN controller driver implementations for the can_remove_rx_filter() API call to be consistent in their validation of the supplied filter_id. Fixes: #64398 Signed-off-by: Henrik Brix Andersen <[email protected]>
1 parent 13072b4 commit 2e98b1f

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed

drivers/can/can_loopback.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,11 @@ void can_loopback_detach(const struct device *dev, int filter_id)
171171
{
172172
struct can_loopback_data *data = DEV_DATA(dev);
173173

174+
if (filter_id < 0 || filter_id >= ARRAY_SIZE(data->filters)) {
175+
LOG_ERR("filter ID %d out of bounds", filter_id);
176+
return;
177+
}
178+
174179
LOG_DBG("Detach filter ID: %d", filter_id);
175180
k_mutex_lock(&data->mtx, K_FOREVER);
176181
data->filters[filter_id].rx_cb = NULL;

drivers/can/can_mcan.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,11 +894,16 @@ int can_mcan_attach_isr(struct can_mcan_data *data,
894894
void can_mcan_detach(struct can_mcan_data *data,
895895
struct can_mcan_msg_sram *msg_ram, int filter_nr)
896896
{
897+
if (filter_nr < 0) {
898+
LOG_ERR("filter ID %d out of bounds", filter_nr);
899+
return;
900+
}
901+
897902
k_mutex_lock(&data->inst_mutex, K_FOREVER);
898903
if (filter_nr >= NUM_STD_FILTER_DATA) {
899904
filter_nr -= NUM_STD_FILTER_DATA;
900905
if (filter_nr >= NUM_STD_FILTER_DATA) {
901-
LOG_ERR("Wrong filter id");
906+
LOG_ERR("filter ID %d out of bounds", filter_nr);
902907
return;
903908
}
904909

drivers/can/can_mcp2515.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,11 @@ static void mcp2515_detach(const struct device *dev, int filter_nr)
551551
{
552552
struct mcp2515_data *dev_data = DEV_DATA(dev);
553553

554+
if (filter_nr < 0 || filter_nr >= CONFIG_CAN_MAX_FILTER) {
555+
LOG_ERR("filter ID %d out of bounds", filter_nr);
556+
return;
557+
}
558+
554559
k_mutex_lock(&dev_data->mutex, K_FOREVER);
555560
dev_data->filter_usage &= ~BIT(filter_nr);
556561
k_mutex_unlock(&dev_data->mutex);

drivers/can/can_mcux_flexcan.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -480,9 +480,8 @@ static void mcux_flexcan_detach(const struct device *dev, int filter_id)
480480
const struct mcux_flexcan_config *config = dev->config;
481481
struct mcux_flexcan_data *data = dev->data;
482482

483-
if (filter_id >= MCUX_FLEXCAN_MAX_RX) {
484-
LOG_ERR("Detach: Filter id >= MAX_RX (%d >= %d)", filter_id,
485-
MCUX_FLEXCAN_MAX_RX);
483+
if (filter_id < 0 || filter_id >= MCUX_FLEXCAN_MAX_RX) {
484+
LOG_ERR("filter ID %d out of bounds", filter_id);
486485
return;
487486
}
488487

drivers/can/can_rcar.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,8 @@ void can_rcar_detach(const struct device *dev, int filter_nr)
829829
{
830830
struct can_rcar_data *data = DEV_CAN_DATA(dev);
831831

832-
if (filter_nr >= CONFIG_CAN_RCAR_MAX_FILTER) {
832+
if (filter_nr < 0 || filter_nr >= CONFIG_CAN_RCAR_MAX_FILTER) {
833+
LOG_ERR("filter ID %d out of bounds", filter_nr);
833834
return;
834835
}
835836

0 commit comments

Comments
 (0)