From 0a682e7f12280db26da2ad3341d5b6a4216be42b Mon Sep 17 00:00:00 2001 From: David Cermak Date: Sun, 19 Mar 2023 20:58:06 +0100 Subject: [PATCH 1/2] fix(mdns): Fix memory issues reported by valgrind * Read after the allocated area (which may lead to subsequent mdns name corruption) * Potentially uninit variable used in condition --- components/mdns/mdns.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 261292b5e..0612b65fd 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -678,7 +678,7 @@ static uint16_t append_fqdn_dots(uint8_t *packet, uint16_t *index, const char *n char *end = host; char *start = host; do { - end = memchr(start, '.', len); + end = memchr(start, '.', host + len - start); end = end ? end : host + len; int part_len = end - start; if (!append_single_str(packet, index, start, part_len)) { @@ -733,6 +733,7 @@ search_next: //read the destination into name and compare name.parts = 0; name.sub = 0; + name.invalid = false; name.host[0] = 0; name.service[0] = 0; name.proto[0] = 0; From 537d170f1da286870e893de732223af50054cfbc Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 20 Mar 2023 12:17:36 +0100 Subject: [PATCH 2/2] test(mdns): Host tests to use IDF's esp_event_stub Also fixes one minor from esp_netif_linux implementation --- components/mdns/CMakeLists.txt | 2 +- .../mdns/tests/host_test/CMakeLists.txt | 4 ++++ .../components/esp_event/CMakeLists.txt | 2 -- .../components/esp_event/esp_event_mock.c | 21 ------------------- .../components/esp_event/include/esp_event.h | 15 ------------- .../esp_event/include/esp_event_base.h | 19 ----------------- .../components/esp_netif_linux/CMakeLists.txt | 3 +-- .../esp_netif_linux/esp_netif_linux.c | 1 + .../components/esp_timer_linux/CMakeLists.txt | 3 +-- .../esp_timer_linux/include/esp_timer.h | 1 + 10 files changed, 9 insertions(+), 62 deletions(-) delete mode 100644 components/mdns/tests/host_test/components/esp_event/CMakeLists.txt delete mode 100644 components/mdns/tests/host_test/components/esp_event/esp_event_mock.c delete mode 100644 components/mdns/tests/host_test/components/esp_event/include/esp_event.h delete mode 100644 components/mdns/tests/host_test/components/esp_event/include/esp_event_base.h diff --git a/components/mdns/CMakeLists.txt b/components/mdns/CMakeLists.txt index 2b5129098..f385c65c8 100644 --- a/components/mdns/CMakeLists.txt +++ b/components/mdns/CMakeLists.txt @@ -6,7 +6,7 @@ endif() idf_build_get_property(target IDF_TARGET) if(${target} STREQUAL "linux") - set(dependencies esp_event esp_netif_linux esp_timer_linux esp_system) + set(dependencies esp_netif_linux esp_timer_linux esp_system) set(srcs "mdns.c" ${MDNS_NETWORKING}) else() set(dependencies lwip console esp_netif) diff --git a/components/mdns/tests/host_test/CMakeLists.txt b/components/mdns/tests/host_test/CMakeLists.txt index 7a421d02f..8575ac333 100644 --- a/components/mdns/tests/host_test/CMakeLists.txt +++ b/components/mdns/tests/host_test/CMakeLists.txt @@ -5,3 +5,7 @@ set(EXTRA_COMPONENT_DIRS "../..") include($ENV{IDF_PATH}/tools/cmake/project.cmake) set(COMPONENTS main esp_netif_linux) project(mdns_host) + +# Enable sanitizers for mdns implementation +idf_component_get_property(mdns mdns COMPONENT_LIB) +target_link_options(${mdns} INTERFACE -fsanitize=address -fsanitize=undefined) diff --git a/components/mdns/tests/host_test/components/esp_event/CMakeLists.txt b/components/mdns/tests/host_test/components/esp_event/CMakeLists.txt deleted file mode 100644 index 2fd6198bd..000000000 --- a/components/mdns/tests/host_test/components/esp_event/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS esp_event_mock.c - INCLUDE_DIRS include) diff --git a/components/mdns/tests/host_test/components/esp_event/esp_event_mock.c b/components/mdns/tests/host_test/components/esp_event/esp_event_mock.c deleted file mode 100644 index 42e159375..000000000 --- a/components/mdns/tests/host_test/components/esp_event/esp_event_mock.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "esp_err.h" -#include "esp_event.h" - -const char *WIFI_EVENT = "WIFI_EVENT"; -const char *IP_EVENT = "IP_EVENT"; - -esp_err_t esp_event_handler_register(const char *event_base, int32_t event_id, void *event_handler, void *event_handler_arg) -{ - return ESP_OK; -} - -esp_err_t esp_event_handler_unregister(const char *event_base, int32_t event_id, void *event_handler) -{ - return ESP_OK; -} diff --git a/components/mdns/tests/host_test/components/esp_event/include/esp_event.h b/components/mdns/tests/host_test/components/esp_event/include/esp_event.h deleted file mode 100644 index 0b8b69ee8..000000000 --- a/components/mdns/tests/host_test/components/esp_event/include/esp_event.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include "stdbool.h" -#include "esp_err.h" -#include "esp_event_base.h" -#include "bsd/string.h" - -esp_err_t esp_event_handler_register(const char *event_base, int32_t event_id, void *event_handler, void *event_handler_arg); - -esp_err_t esp_event_handler_unregister(const char *event_base, int32_t event_id, void *event_handler); diff --git a/components/mdns/tests/host_test/components/esp_event/include/esp_event_base.h b/components/mdns/tests/host_test/components/esp_event/include/esp_event_base.h deleted file mode 100644 index 059805bbe..000000000 --- a/components/mdns/tests/host_test/components/esp_event/include/esp_event_base.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -typedef enum { - WIFI_EVENT_STA_CONNECTED, /**< ESP32 station connected to AP */ - WIFI_EVENT_STA_DISCONNECTED, /**< ESP32 station disconnected from AP */ - WIFI_EVENT_AP_START, /**< ESP32 soft-AP start */ - WIFI_EVENT_AP_STOP, /**< ESP32 soft-AP stop */ -} mdns_used_event_t; - -#define ESP_EVENT_DECLARE_BASE(x) -#define ESP_EVENT_ANY_ID (-1) - -typedef void *esp_event_base_t; -typedef void *system_event_t; diff --git a/components/mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt b/components/mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt index b02c5fec0..44f6b4be0 100644 --- a/components/mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt +++ b/components/mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt @@ -1,3 +1,2 @@ idf_component_register(SRCS esp_netif_linux.c - INCLUDE_DIRS include $ENV{IDF_PATH}/components/esp_netif/include - REQUIRES esp_event) + INCLUDE_DIRS include $ENV{IDF_PATH}/components/esp_netif/include) diff --git a/components/mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c b/components/mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c index 5c9aaadd1..03a7193b4 100644 --- a/components/mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c +++ b/components/mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c @@ -55,6 +55,7 @@ esp_err_t esp_netif_get_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_ } tmp = tmp->ifa_next; } + freeifaddrs(addrs); return ESP_OK; } diff --git a/components/mdns/tests/host_test/components/esp_timer_linux/CMakeLists.txt b/components/mdns/tests/host_test/components/esp_timer_linux/CMakeLists.txt index 80bcd3e36..0e47f3df9 100644 --- a/components/mdns/tests/host_test/components/esp_timer_linux/CMakeLists.txt +++ b/components/mdns/tests/host_test/components/esp_timer_linux/CMakeLists.txt @@ -1,6 +1,5 @@ idf_component_register(SRCS esp_timer_linux.c timer_task.cpp - INCLUDE_DIRS include - REQUIRES esp_event) + INCLUDE_DIRS include) set_target_properties(${COMPONENT_LIB} PROPERTIES CXX_STANDARD 17 diff --git a/components/mdns/tests/host_test/components/esp_timer_linux/include/esp_timer.h b/components/mdns/tests/host_test/components/esp_timer_linux/include/esp_timer.h index 24782a4bf..decf7634b 100644 --- a/components/mdns/tests/host_test/components/esp_timer_linux/include/esp_timer.h +++ b/components/mdns/tests/host_test/components/esp_timer_linux/include/esp_timer.h @@ -7,6 +7,7 @@ #include #include +#include "bsd/string.h" typedef struct esp_timer *esp_timer_handle_t;