fix(lwip): Cleanup freertos port to use more readable checks

It also removes incorrect comment that's not valid any more (leftover from 6933c103e5)
It also removes ESP_THREAD_SAFE macro and sys_mbox_set_owner() which were not used
It also fixes CID 460613: Uninitialized pointer read in api_lib.c, netconn_gethostbyname_addrtype
Updated lwip submodule: git log --oneline 4297782b..aa4f6e78
* api_msg: Fix unused local variable if LWIP_NETCONN_SEM_PER_THREAD=1 (espressif/esp-lwip@aa4f6e78)
This commit is contained in:
David Cermak 2024-05-09 13:09:59 +02:00
parent 2e2a621dca
commit 70645836fc
4 changed files with 13 additions and 45 deletions

@ -1 +1 @@
Subproject commit 4297782bf9e614be1bb8605f30d46af8697fab17 Subproject commit aa4f6e780f374af5e10730960fe0262a916166d1

View File

@ -3,7 +3,7 @@
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
* SPDX-FileContributor: 2018-2022 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD
*/ */
#ifndef __SYS_ARCH_H__ #ifndef __SYS_ARCH_H__
#define __SYS_ARCH_H__ #define __SYS_ARCH_H__
@ -24,7 +24,6 @@ typedef TaskHandle_t sys_thread_t;
typedef struct sys_mbox_s { typedef struct sys_mbox_s {
QueueHandle_t os_mbox; QueueHandle_t os_mbox;
void *owner;
}* sys_mbox_t; }* sys_mbox_t;
/** This is returned by _fromisr() sys functions to tell the outermost function /** This is returned by _fromisr() sys functions to tell the outermost function
@ -38,33 +37,17 @@ void sys_delay_ms(uint32_t ms);
#define LWIP_COMPAT_MUTEX 0 #define LWIP_COMPAT_MUTEX 0
#if !LWIP_COMPAT_MUTEX #if !LWIP_COMPAT_MUTEX
#define sys_mutex_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) #define sys_mutex_valid_val(mutex) ((mutex) != NULL)
#define sys_mutex_set_invalid( x ) ( ( *x ) = NULL ) #define sys_mutex_valid(mutex) (((mutex) != NULL) && sys_mutex_valid_val(*(mutex)))
#define sys_mutex_set_invalid(mutex) ((*(mutex)) = NULL)
#endif #endif
#define sys_mbox_valid( x ) ( ( ( *x ) == NULL) ? pdFALSE : pdTRUE ) #define sys_mbox_valid(mbox) (*(mbox) != NULL)
#define sys_mbox_set_invalid(mbox) (*(mbox) = NULL)
/* Define the sys_mbox_set_invalid() to empty to support lock-free mbox in ESP LWIP. #define sys_sem_valid_val(sema) ((sema) != NULL)
* #define sys_sem_valid(sema) (((sema) != NULL) && sys_sem_valid_val(*(sema)))
* The basic idea about the lock-free mbox is that the mbox should always be valid unless #define sys_sem_set_invalid(sema) ((*(sema)) = NULL)
* no socket APIs are using the socket and the socket is closed. ESP LWIP achieves this by
* following two changes to official LWIP:
* 1. Postpone the deallocation of mbox to netconn_free(), in other words, free the mbox when
* no one is using the socket.
* 2. Define the sys_mbox_set_invalid() to empty if the mbox is not actually freed.
* The second change is necessary. Consider a common scenario: the application task calls
* recv() to receive packets from the socket, the sys_mbox_valid() returns true. Because there
* is no lock for the mbox, the LWIP CORE can call sys_mbox_set_invalid() to set the mbox at
* anytime and the thread-safe issue may happen.
*
* However, if the sys_mbox_set_invalid() is not called after sys_mbox_free(), e.g. in netconn_alloc(),
* we need to initialize the mbox to invalid explicitly since sys_mbox_set_invalid() now is empty.
*/
#define sys_mbox_set_invalid( x ) *x = NULL
#define sys_sem_valid( x ) ( ( (x) == NULL ) ? pdFALSE : ( ( *x ) == NULL ? pdFALSE : pdTRUE ) )
#define sys_sem_set_invalid( x ) ( ( *x ) = NULL )
void sys_delay_ms(uint32_t ms); void sys_delay_ms(uint32_t ms);
sys_sem_t* sys_thread_sem_init(void); sys_sem_t* sys_thread_sem_init(void);

View File

@ -3,7 +3,7 @@
* *
* SPDX-License-Identifier: BSD-3-Clause * SPDX-License-Identifier: BSD-3-Clause
* *
* SPDX-FileContributor: 2018-2022 Espressif Systems (Shanghai) CO LTD * SPDX-FileContributor: 2018-2024 Espressif Systems (Shanghai) CO LTD
*/ */
/* lwIP includes. */ /* lwIP includes. */
@ -219,10 +219,6 @@ sys_mbox_new(sys_mbox_t *mbox, int size)
return ERR_MEM; return ERR_MEM;
} }
#if ESP_THREAD_SAFE
(*mbox)->owner = NULL;
#endif
LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("new *mbox ok mbox=%p os_mbox=%p\n", *mbox, (*mbox)->os_mbox)); LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("new *mbox ok mbox=%p os_mbox=%p\n", *mbox, (*mbox)->os_mbox));
return ERR_OK; return ERR_OK;
} }
@ -352,15 +348,6 @@ sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg)
return 0; return 0;
} }
void
sys_mbox_set_owner(sys_mbox_t *mbox, void* owner)
{
if (mbox && *mbox) {
(*mbox)->owner = owner;
LWIP_DEBUGF(ESP_THREAD_SAFE_DEBUG, ("set mbox=%p owner=%p", *mbox, owner));
}
}
/** /**
* @brief Delete a mailbox * @brief Delete a mailbox
* *
@ -444,7 +431,7 @@ sys_jiffies(void)
} }
/** /**
* @brief Get current time, in miliseconds * @brief Get current time, in milliseconds
* *
* @return current time * @return current time
*/ */

View File

@ -1592,7 +1592,7 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
#define ESP_LWIP 1 #define ESP_LWIP 1
#define ESP_LWIP_ARP 1 #define ESP_LWIP_ARP 1
#define ESP_PER_SOC_TCP_WND 0 #define ESP_PER_SOC_TCP_WND 0
#define ESP_THREAD_SAFE 1 #define ESP_THREAD_SAFE 1 /* Not used (to be removed in v6.x) */
#define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF #define ESP_THREAD_SAFE_DEBUG LWIP_DBG_OFF
#define ESP_DHCP 1 #define ESP_DHCP 1
#define ESP_DNS 1 #define ESP_DNS 1
@ -1630,12 +1630,10 @@ static inline uint32_t timeout_from_offered(uint32_t lease, uint32_t min)
#if LWIP_NETCONN_SEM_PER_THREAD #if LWIP_NETCONN_SEM_PER_THREAD
#if ESP_THREAD_SAFE
#define LWIP_NETCONN_THREAD_SEM_GET() sys_thread_sem_get() #define LWIP_NETCONN_THREAD_SEM_GET() sys_thread_sem_get()
#define LWIP_NETCONN_THREAD_SEM_ALLOC() sys_thread_sem_init() #define LWIP_NETCONN_THREAD_SEM_ALLOC() sys_thread_sem_init()
#define LWIP_NETCONN_THREAD_SEM_FREE() sys_thread_sem_deinit() #define LWIP_NETCONN_THREAD_SEM_FREE() sys_thread_sem_deinit()
#endif #endif
#endif
/** /**
* If CONFIG_ALLOC_MEMORY_IN_SPIRAM_FIRST is enabled, Try to * If CONFIG_ALLOC_MEMORY_IN_SPIRAM_FIRST is enabled, Try to