Skip to content

Commit 6ade0cf

Browse files
sylvioalvesnashif
authored andcommitted
wifi: esp32: fix memory leak
In case where the system is overloaded, net stack buffer could fail to allocate next packet. That scenario requires wifi internal Wi-Fi driver to free current rx buffer. This is currently not being called. This fixes it by making sure esp_wifi_internal_free_rx_buffer() is called in all scenarios. Fixes #63043 Signed-off-by: Sylvio Alves <[email protected]>
1 parent 1c19d43 commit 6ade0cf

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

drivers/wifi/esp32/src/esp_wifi_drv.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,20 @@ static esp_err_t eth_esp32_rx(void *buffer, uint16_t len, void *eb)
117117
struct net_pkt *pkt;
118118

119119
if (esp32_wifi_iface == NULL) {
120+
esp_wifi_internal_free_rx_buffer(eb);
120121
LOG_ERR("network interface unavailable");
121122
return -EIO;
122123
}
123124

124125
pkt = net_pkt_rx_alloc_with_buffer(esp32_wifi_iface, len, AF_UNSPEC, 0, K_MSEC(100));
125126
if (!pkt) {
126-
LOG_ERR("Failed to get net buffer");
127+
LOG_ERR("Failed to allocate net buffer");
128+
esp_wifi_internal_free_rx_buffer(eb);
127129
return -EIO;
128130
}
129131

130132
if (net_pkt_write(pkt, buffer, len) < 0) {
131-
LOG_ERR("Failed to write pkt");
133+
LOG_ERR("Failed to write to net buffer");
132134
goto pkt_unref;
133135
}
134136

@@ -146,6 +148,7 @@ static esp_err_t eth_esp32_rx(void *buffer, uint16_t len, void *eb)
146148
return 0;
147149

148150
pkt_unref:
151+
esp_wifi_internal_free_rx_buffer(eb);
149152
net_pkt_unref(pkt);
150153

151154
#if defined(CONFIG_NET_STATISTICS_WIFI)

0 commit comments

Comments
 (0)