From f6f7de4ccc107c018630e4c15500825caf02e1c2 Mon Sep 17 00:00:00 2001 From: Teufelchen1 Date: Tue, 15 Jul 2025 11:08:30 +0200 Subject: [PATCH] net/l2filter: fix incorrect length check Co-authored-by: namberino --- sys/include/net/l2filter.h | 6 ++++-- sys/net/link_layer/l2filter/l2filter.c | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/include/net/l2filter.h b/sys/include/net/l2filter.h index e421861148..11f999a900 100644 --- a/sys/include/net/l2filter.h +++ b/sys/include/net/l2filter.h @@ -83,8 +83,10 @@ typedef struct { * @pre @p addr != NULL * @pre @p addr_maxlen <= @ref CONFIG_L2FILTER_ADDR_MAXLEN * - * @return 0 on success - * @return -ENOMEM if no empty slot left in list + * @retval 0 on success + * @retval -ENOMEM if no empty slot left in list + * @retval -EINVAL if `addr_len > CONFIG_L2FILTER_ADDR_MAXLEN` **AND** `NDEBUG` is enabled. + * Otherwise this condition will trip an `assert()`. */ int l2filter_add(l2filter_t *list, const void *addr, size_t addr_len); diff --git a/sys/net/link_layer/l2filter/l2filter.c b/sys/net/link_layer/l2filter/l2filter.c index 02b32584ae..be01435015 100644 --- a/sys/net/link_layer/l2filter/l2filter.c +++ b/sys/net/link_layer/l2filter/l2filter.c @@ -44,7 +44,11 @@ void l2filter_init(l2filter_t *list) int l2filter_add(l2filter_t *list, const void *addr, size_t addr_len) { - assert(list && addr && (addr_len <= CONFIG_L2FILTER_ADDR_MAXLEN)); + assert(list && addr); + if (addr_len > CONFIG_L2FILTER_ADDR_MAXLEN) { + assert(0); + return -EINVAL; + } int res = -ENOMEM;