Commit a094fc5e authored by Henrik Brix Andersen's avatar Henrik Brix Andersen Committed by Henrik Brix Andersen
Browse files

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: default avatarHenrik Brix Andersen <hebad@vestas.com>
parent e6aed2d9
Loading
Loading
Loading
Loading
+1 −1
Changes for drivers/can/can_loopback.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ static void can_loopback_remove_rx_filter(const struct device *dev, int filter_i
{
	struct can_loopback_data *data = dev->data;

	if (filter_id >= ARRAY_SIZE(data->filters)) {
	if (filter_id < 0 || filter_id >= ARRAY_SIZE(data->filters)) {
		LOG_ERR("filter ID %d out-of-bounds", filter_id);
		return;
	}
+6 −1
Changes for drivers/can/can_mcan.c: 6 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -1109,12 +1109,17 @@ void can_mcan_remove_rx_filter(const struct device *dev, int filter_id)
{
	struct can_mcan_data *data = dev->data;
	struct can_mcan_msg_sram *msg_ram = data->msg_ram;
	if (filter_id < 0) {
		LOG_ERR("filter ID %d out of bounds", filter_id);
		return;
	}


	k_mutex_lock(&data->inst_mutex, K_FOREVER);
	if (filter_id >= NUM_STD_FILTER_DATA) {
		filter_id -= NUM_STD_FILTER_DATA;
		if (filter_id >= NUM_EXT_FILTER_DATA) {
			LOG_ERR("Wrong filter id");
			LOG_ERR("filter ID %d out of bounds", filter_id);
			return;
		}

+5 −0
Changes for drivers/can/can_mcp2515.c: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -674,6 +674,11 @@ static void mcp2515_remove_rx_filter(const struct device *dev, int filter_id)
{
	struct mcp2515_data *dev_data = dev->data;

	if (filter_id < 0 || filter_id >= CONFIG_CAN_MAX_FILTER) {
		LOG_ERR("filter ID %d out of bounds", filter_id);
		return;
	}

	k_mutex_lock(&dev_data->mutex, K_FOREVER);
	dev_data->filter_usage &= ~BIT(filter_id);
	k_mutex_unlock(&dev_data->mutex);
+2 −3
Changes for drivers/can/can_mcux_flexcan.c: 2 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -604,9 +604,8 @@ static void mcux_flexcan_remove_rx_filter(const struct device *dev, int filter_i
	const struct mcux_flexcan_config *config = dev->config;
	struct mcux_flexcan_data *data = dev->data;

	if (filter_id >= MCUX_FLEXCAN_MAX_RX) {
		LOG_ERR("Detach: Filter id >= MAX_RX (%d >= %d)", filter_id,
			MCUX_FLEXCAN_MAX_RX);
	if (filter_id < 0 || filter_id >= MCUX_FLEXCAN_MAX_RX) {
		LOG_ERR("filter ID %d out of bounds", filter_id);
		return;
	}

+1 −0
Changes for drivers/can/can_native_posix_linux.c: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ static void can_npl_remove_rx_filter(const struct device *dev, int filter_id)
	struct can_npl_data *data = dev->data;

	if (filter_id < 0 || filter_id >= ARRAY_SIZE(data->filters)) {
		LOG_ERR("filter ID %d out of bounds");
		return;
	}

Loading