Commit 6c5400d2 authored by Henrik Brix Andersen's avatar Henrik Brix Andersen Committed by Carles Cufi
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 88de0d15
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
@@ -211,7 +211,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
@@ -1149,12 +1149,17 @@ void can_mcan_remove_rx_filter(const struct device *dev, int filter_id)
	struct can_mcan_data *data = dev->data;
	int err;

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

	k_mutex_lock(&data->lock, K_FOREVER);

	if (filter_id >= cbs->num_std) {
		filter_id -= cbs->num_std;
		if (filter_id >= cbs->num_ext) {
			LOG_ERR("Wrong filter id");
			LOG_ERR("filter ID %d out of bounds", filter_id);
			k_mutex_unlock(&data->lock);
			return;
		}
+5 −0
Changes for drivers/can/can_mcp2515.c: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -663,6 +663,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
@@ -922,9 +922,8 @@ static void mcux_flexcan_remove_rx_filter(const struct device *dev, int filter_i
{
	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
@@ -239,6 +239,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