From f45dbd1f974263446e4f349269548a1e1c435672 Mon Sep 17 00:00:00 2001 From: Mahavir Jain Date: Wed, 6 Jul 2022 09:03:08 +0530 Subject: [PATCH] esp_wifi: netif: set interface before registering Wi-Fi driver RX callback If appropriate interface is not set then RX callback can potentially dereference null pointer from `s_wifi_netifs` table. This in-fact resulted in `LoadProhibited` exception in HTTP server example test case. Order here for setting interface and then registering callback was correct but it was modified in 0e71a325de309400b68f018da7df52f1890c57ba causing this regression. --- components/esp_wifi/src/wifi_netif.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/components/esp_wifi/src/wifi_netif.c b/components/esp_wifi/src/wifi_netif.c index e6b8e409d7..cc3672f459 100644 --- a/components/esp_wifi/src/wifi_netif.c +++ b/components/esp_wifi/src/wifi_netif.c @@ -133,10 +133,13 @@ esp_err_t esp_wifi_register_if_rxcb(wifi_netif_driver_t ifx, esp_netif_receive_t return ESP_ERR_NOT_SUPPORTED; } + /* Interface must be set before registering Wi-Fi RX callback */ + set_wifi_netif(wifi_interface, esp_netif_get_netif_impl(arg)); + if ((ret = esp_wifi_internal_reg_rxcb(wifi_interface, rxcb)) != ESP_OK) { ESP_LOGE(TAG, "esp_wifi_internal_reg_rxcb for if=%d failed with %d", wifi_interface, ret); return ESP_ERR_INVALID_STATE; } - set_wifi_netif(wifi_interface, esp_netif_get_netif_impl(arg)); + return ESP_OK; }