This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch releases/12.13
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 8f3846584be924d265a3c9489368c8f6c1529e98
Author: shichunma <[email protected]>
AuthorDate: Sat Mar 21 15:42:16 2026 +0800

    net/nat: g_nat_lock can be used recursively
    
    case: when rndis receive a packet and this packet is going to be forwarded.
    1. first lock happen when ipv4_dev_forward call ipv4_nat_outbound;
    2. next lock is: ipv4_nat_outbound_entry_find --> nat_port_select --> 
tcp_selectport
       --> nat_port_inuse
    
    Signed-off-by: Jerry Ma <[email protected]>
---
 net/nat/nat.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/nat/nat.c b/net/nat/nat.c
index 4ccc2d9700b..426a04cd848 100644
--- a/net/nat/nat.c
+++ b/net/nat/nat.c
@@ -42,7 +42,7 @@
  * Private Data
  ****************************************************************************/
 
-static mutex_t g_nat_lock = NXMUTEX_INITIALIZER;
+static rmutex_t g_nat_lock = NXRMUTEX_INITIALIZER;
 
 /****************************************************************************
  * Private Functions
@@ -418,7 +418,7 @@ uint32_t nat_expire_time(uint8_t protocol)
 
 void nat_lock(void)
 {
-  nxmutex_lock(&g_nat_lock);
+  nxrmutex_lock(&g_nat_lock);
 }
 
 /****************************************************************************
@@ -431,7 +431,7 @@ void nat_lock(void)
 
 void nat_unlock(void)
 {
-  nxmutex_unlock(&g_nat_lock);
+  nxrmutex_unlock(&g_nat_lock);
 }
 
 #endif /* CONFIG_NET_NAT */

Reply via email to