Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump carloscastrojumo/github-cherry-pick-action from 1.0.9 to 1.0.10 #218

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/cherry-picks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
with:
fetch-depth: 0
- name: Cherry-Pick into sve branch
uses: carloscastrojumo/[email protected].9
uses: carloscastrojumo/[email protected].10
with:
token: ${{ secrets.MATTER_PAT }}
branch: 1.3-sve
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
From b4cd585ea8b8e0fabcc7b7b71ea4bbe84793422a Mon Sep 17 00:00:00 2001
From: WanqQixiang <[email protected]>
Date: Fri, 17 May 2024 15:30:45 +0800
Subject: [PATCH] fix(esp_netif): Fix mldv6 report memory leak in esp_netif

---
components/esp_netif/lwip/esp_netif_lwip.c | 39 +++++++++++--------
.../esp_netif/lwip/esp_netif_lwip_internal.h | 2 +
2 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/components/esp_netif/lwip/esp_netif_lwip.c b/components/esp_netif/lwip/esp_netif_lwip.c
index 7f51aed896..b0bfa50bb1 100644
--- a/components/esp_netif/lwip/esp_netif_lwip.c
+++ b/components/esp_netif/lwip/esp_netif_lwip.c
@@ -1,5 +1,5 @@
/*
- * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
+ * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -140,8 +140,8 @@ static void esp_netif_internal_dhcpc_cb(struct netif *netif);
#endif
#if LWIP_IPV6
static void esp_netif_internal_nd6_cb(struct netif *p_netif, uint8_t ip_index);
-static void netif_set_mldv6_flag(struct netif *netif);
-static void netif_unset_mldv6_flag(struct netif *netif);
+static void netif_set_mldv6_flag(esp_netif_t *netif);
+static void netif_unset_mldv6_flag(esp_netif_t *netif);
#endif /* LWIP_IPV6 */

static esp_err_t esp_netif_destroy_api(esp_netif_api_msg_t *msg);
@@ -156,7 +156,8 @@ static void netif_callback_fn(struct netif* netif, netif_nsc_reason_t reason, co
#if LWIP_IPV6
if ((reason & LWIP_NSC_IPV6_ADDR_STATE_CHANGED) && (args != NULL)) {
s8_t addr_idx = args->ipv6_addr_state_changed.addr_index;
- if (netif_ip6_addr_state(netif, addr_idx) & IP6_ADDR_VALID) {
+ if (!(args->ipv6_addr_state_changed.old_state & IP6_ADDR_VALID) &&
+ netif_ip6_addr_state(netif, addr_idx) & IP6_ADDR_VALID) {
/* address is valid -> call the callback function */
esp_netif_internal_nd6_cb(netif, addr_idx);
}
@@ -845,7 +846,7 @@ static void esp_netif_lwip_remove(esp_netif_t *esp_netif)
#endif
#if ESP_MLDV6_REPORT && LWIP_IPV6
if (esp_netif->flags & ESP_NETIF_FLAG_MLDV6_REPORT) {
- netif_unset_mldv6_flag(esp_netif->lwip_netif);
+ netif_unset_mldv6_flag(esp_netif);
}
#endif
if (esp_netif->flags & ESP_NETIF_DHCP_CLIENT) {
@@ -1693,7 +1694,7 @@ static esp_err_t esp_netif_down_api(esp_netif_api_msg_t *msg)
#if CONFIG_LWIP_IPV6
#if ESP_MLDV6_REPORT
if (esp_netif->flags & ESP_NETIF_FLAG_MLDV6_REPORT) {
- netif_unset_mldv6_flag(esp_netif->lwip_netif);
+ netif_unset_mldv6_flag(esp_netif);
}
#endif
for(int8_t i = 0 ;i < LWIP_IPV6_NUM_ADDRESSES ;i++) {
@@ -1997,25 +1998,31 @@ esp_err_t esp_netif_get_dns_info(esp_netif_t *esp_netif, esp_netif_dns_type_t ty

static void netif_send_mldv6(void *arg)
{
- struct netif *netif = arg;
- if (!netif_is_up(netif)) {
+ esp_netif_t *esp_netif = arg;
+ esp_netif->mldv6_report_timer_started = false;
+ if (!netif_is_up(esp_netif->lwip_netif)) {
return;
}
- mld6_report_groups(netif);
- sys_timeout(CONFIG_LWIP_MLDV6_TMR_INTERVAL*1000, netif_send_mldv6, netif);
+ mld6_report_groups(esp_netif->lwip_netif);
+ esp_netif->mldv6_report_timer_started = true;
+ sys_timeout(CONFIG_LWIP_MLDV6_TMR_INTERVAL*1000, netif_send_mldv6, esp_netif);
}

-static void netif_set_mldv6_flag(struct netif *netif)
+static void netif_set_mldv6_flag(esp_netif_t *esp_netif)
{
- if (!netif_is_up(netif)) {
+ if (!netif_is_up(esp_netif->lwip_netif) || esp_netif->mldv6_report_timer_started) {
return;
}
- sys_timeout(CONFIG_LWIP_MLDV6_TMR_INTERVAL*1000, netif_send_mldv6, netif);
+ esp_netif->mldv6_report_timer_started = true;
+ sys_timeout(CONFIG_LWIP_MLDV6_TMR_INTERVAL*1000, netif_send_mldv6, esp_netif);
}

-static void netif_unset_mldv6_flag(struct netif *netif)
+static void netif_unset_mldv6_flag(esp_netif_t *esp_netif)
{
- sys_untimeout(netif_send_mldv6, netif);
+ if (esp_netif->mldv6_report_timer_started) {
+ esp_netif->mldv6_report_timer_started = false;
+ sys_untimeout(netif_send_mldv6, esp_netif);
+ }
}

#endif
@@ -2062,7 +2069,7 @@ static void esp_netif_internal_nd6_cb(struct netif *netif, uint8_t ip_index)

if (esp_netif->flags&ESP_NETIF_FLAG_MLDV6_REPORT) {
#if ESP_MLDV6_REPORT
- netif_set_mldv6_flag(netif);
+ netif_set_mldv6_flag(esp_netif);
#else
ESP_LOGW(TAG,"CONFIG_LWIP_ESP_MLDV6_REPORT not enabled, but esp-netif configured with ESP_NETIF_FLAG_MLDV6_REPORT");
#endif
diff --git a/components/esp_netif/lwip/esp_netif_lwip_internal.h b/components/esp_netif/lwip/esp_netif_lwip_internal.h
index f1fc1f8bf8..842fc81735 100644
--- a/components/esp_netif/lwip/esp_netif_lwip_internal.h
+++ b/components/esp_netif/lwip/esp_netif_lwip_internal.h
@@ -112,4 +112,6 @@ struct esp_netif_obj {
uint16_t max_fdb_sta_entries;
uint8_t max_ports;
#endif // CONFIG_ESP_NETIF_BRIDGE_EN
+ // mldv6 timer
+ bool mldv6_report_timer_started;
};
--
2.25.1

Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ ENV IDF_PATH=/opt/espressif/esp-idf/
ENV IDF_TOOLS_PATH=/opt/espressif/tools

COPY --from=build /tmp/esp-idf /opt/espressif/esp-idf
COPY 0001-fix-esp_netif-Fix-mldv6-report-memory-leak-in-esp_ne.patch /opt/espressif/esp-idf

# Setup the ESP-IDF
WORKDIR /opt/espressif/esp-idf
RUN set -x \
&& patch -p1 < 0001-fix-esp_netif-Fix-mldv6-report-memory-leak-in-esp_ne.patch \
&& ./install.sh \
&& : # last line