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

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

commit 6b625dfdf28d8cc193fec9d4c938d76f78e5ed3b
Author: zhanghongyu <[email protected]>
AuthorDate: Tue Jul 29 17:25:55 2025 +0800

    net/inet: replace net_lock with conn_lock
    
    Protect icmp resources through conn_lock
    
    Signed-off-by: zhanghongyu <[email protected]>
---
 net/inet/inet_sockif.c      | 21 +++++++++++----------
 net/inet/ipv4_getsockname.c |  7 ++++---
 net/inet/ipv4_getsockopt.c  |  5 +++--
 net/inet/ipv4_setsockopt.c  |  5 +++--
 net/inet/ipv6_getsockname.c |  7 ++++---
 net/inet/ipv6_getsockopt.c  |  5 +++--
 net/inet/ipv6_setsockopt.c  |  5 +++--
 7 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/net/inet/inet_sockif.c b/net/inet/inet_sockif.c
index f6c12416513..2d5c77b64f7 100644
--- a/net/inet/inet_sockif.c
+++ b/net/inet/inet_sockif.c
@@ -44,6 +44,7 @@
 #include "icmpv6/icmpv6.h"
 #include "sixlowpan/sixlowpan.h"
 #include "socket/socket.h"
+#include "utils/utils.h"
 #include "inet/inet.h"
 
 #ifdef HAVE_INET_SOCKETS
@@ -913,7 +914,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
            * options.
            */
 
-          net_lock();
+          conn_lock(conn);
 
           /* Set or clear the linger option bit and linger time
            * (in deciseconds)
@@ -930,7 +931,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
               conn->s_linger = 0;
             }
 
-          net_unlock();
+          conn_unlock(conn);
         }
         break;
 #endif
@@ -961,7 +962,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
           buffersize = MIN(buffersize, CONFIG_NET_MAX_RECV_BUFSIZE);
 #endif
 
-          net_lock();
+          conn_lock(psock->s_conn);
 
 #ifdef NET_TCP_HAVE_STACK
           if (psock->s_type == SOCK_STREAM)
@@ -986,11 +987,11 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
           else
 #endif
             {
-              net_unlock();
+              conn_unlock(psock->s_conn);
               return -ENOPROTOOPT;
             }
 
-          net_unlock();
+          conn_unlock(psock->s_conn);
         }
         break;
 #endif
@@ -1022,7 +1023,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
           buffersize = MIN(buffersize, CONFIG_NET_MAX_SEND_BUFSIZE);
 #endif
 
-          net_lock();
+          conn_lock(psock->s_conn);
 
 #ifdef NET_TCP_HAVE_STACK
           if (psock->s_type == SOCK_STREAM)
@@ -1047,11 +1048,11 @@ static int inet_set_socketlevel_option(FAR struct 
socket *psock, int option,
           else
 #endif
             {
-              net_unlock();
+              conn_unlock(psock->s_conn);
               return -ENOPROTOOPT;
             }
 
-          net_unlock();
+          conn_unlock(psock->s_conn);
         }
         break;
 #endif
@@ -1066,7 +1067,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
 
           if (psock->s_type == SOCK_DGRAM)
             {
-              net_lock();
+              conn_lock(psock->s_conn);
 
               /* For now the timestamp enable is just boolean.
                * If SO_TIMESTAMPING support is added in future, it can be
@@ -1076,7 +1077,7 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
               FAR struct udp_conn_s *conn = psock->s_conn;
               conn->timestamp = (*((FAR int *)value) != 0);
 
-              net_unlock();
+              conn_unlock(psock->s_conn);
             }
           else
             {
diff --git a/net/inet/ipv4_getsockname.c b/net/inet/ipv4_getsockname.c
index 0f1f493f0bd..b81bce5dbc0 100644
--- a/net/inet/ipv4_getsockname.c
+++ b/net/inet/ipv4_getsockname.c
@@ -39,6 +39,7 @@
 #include "netdev/netdev.h"
 #include "udp/udp.h"
 #include "tcp/tcp.h"
+#include "utils/utils.h"
 #include "inet/inet.h"
 
 #ifdef CONFIG_NET_IPv4
@@ -130,7 +131,7 @@ int ipv4_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
        return OK;
     }
 
-  net_lock();
+  conn_lock(psock->s_conn);
 
   /* Find the device matching the IPv4 address in the connection structure.
    * NOTE: listening sockets have no ripaddr.  Work around is to use the
@@ -146,7 +147,7 @@ int ipv4_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
 
   if (dev == NULL)
     {
-      net_unlock();
+      conn_unlock(psock->s_conn);
       return -EINVAL;
     }
 
@@ -158,7 +159,7 @@ int ipv4_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
 
   *addrlen = sizeof(struct sockaddr_in);
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
 
   /* Return success */
 
diff --git a/net/inet/ipv4_getsockopt.c b/net/inet/ipv4_getsockopt.c
index 58e3f0069fa..c10b9005de0 100644
--- a/net/inet/ipv4_getsockopt.c
+++ b/net/inet/ipv4_getsockopt.c
@@ -35,6 +35,7 @@
 #include <netinet/in.h>
 
 #include "netfilter/iptables.h"
+#include "utils/utils.h"
 
 #ifdef CONFIG_NET_IPv4
 
@@ -76,7 +77,7 @@ int ipv4_getsockopt(FAR struct socket *psock, int option,
 
   ninfo("option: %d\n", option);
 
-  net_lock();
+  conn_lock(psock->s_conn);
   switch (option)
     {
 #ifdef CONFIG_NET_IPTABLES
@@ -102,7 +103,7 @@ int ipv4_getsockopt(FAR struct socket *psock, int option,
         break;
     }
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
   return ret;
 }
 
diff --git a/net/inet/ipv4_setsockopt.c b/net/inet/ipv4_setsockopt.c
index ff449e321f1..cd0a6bd97f6 100644
--- a/net/inet/ipv4_setsockopt.c
+++ b/net/inet/ipv4_setsockopt.c
@@ -41,6 +41,7 @@
 #include "inet/inet.h"
 #include "socket/socket.h"
 #include "udp/udp.h"
+#include "utils/utils.h"
 
 #if defined(CONFIG_NET_IPv4) && defined(CONFIG_NET_SOCKOPTS)
 
@@ -86,7 +87,7 @@ int ipv4_setsockopt(FAR struct socket *psock, int option,
    * REVISIT:  Clone the logic from netdev_ioctl.c here.
    */
 
-  net_lock();
+  conn_lock(psock->s_conn);
   switch (option)
     {
 #ifdef CONFIG_NET_IGMP
@@ -391,7 +392,7 @@ int ipv4_setsockopt(FAR struct socket *psock, int option,
         break;
     }
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
   return ret;
 }
 
diff --git a/net/inet/ipv6_getsockname.c b/net/inet/ipv6_getsockname.c
index bbb7503b3df..fd8fe8fb131 100644
--- a/net/inet/ipv6_getsockname.c
+++ b/net/inet/ipv6_getsockname.c
@@ -39,6 +39,7 @@
 #include "netdev/netdev.h"
 #include "udp/udp.h"
 #include "tcp/tcp.h"
+#include "utils/utils.h"
 #include "inet/inet.h"
 
 #ifdef CONFIG_NET_IPv6
@@ -130,7 +131,7 @@ int ipv6_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
       return OK;
     }
 
-  net_lock();
+  conn_lock(psock->s_conn);
 
   /* Find the device matching the IPv6 address in the connection structure.
    * NOTE:  listening sockets have no ripaddr.  Work around is to use the
@@ -145,7 +146,7 @@ int ipv6_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
   dev = netdev_findby_ripv6addr(*lipaddr, *ripaddr);
   if (!dev)
     {
-      net_unlock();
+      conn_unlock(psock->s_conn);
       return -EINVAL;
     }
 
@@ -156,7 +157,7 @@ int ipv6_getsockname(FAR struct socket *psock, FAR struct 
sockaddr *addr,
                     netdev_ipv6_srcaddr(dev, *lipaddr));
   *addrlen = sizeof(struct sockaddr_in6);
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
 
   /* Return success */
 
diff --git a/net/inet/ipv6_getsockopt.c b/net/inet/ipv6_getsockopt.c
index 0fa7289eea3..2e66365ea7d 100644
--- a/net/inet/ipv6_getsockopt.c
+++ b/net/inet/ipv6_getsockopt.c
@@ -38,6 +38,7 @@
 #include "netfilter/iptables.h"
 #include "inet/inet.h"
 #include "udp/udp.h"
+#include "utils/utils.h"
 
 #ifdef CONFIG_NET_IPv6
 
@@ -75,7 +76,7 @@ int ipv6_getsockopt(FAR struct socket *psock, int option,
 
   ninfo("option: %d\n", option);
 
-  net_lock();
+  conn_lock(psock->s_conn);
   switch (option)
     {
 #ifdef CONFIG_NET_IPTABLES
@@ -101,7 +102,7 @@ int ipv6_getsockopt(FAR struct socket *psock, int option,
         break;
     }
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
   return ret;
 }
 
diff --git a/net/inet/ipv6_setsockopt.c b/net/inet/ipv6_setsockopt.c
index 99474824e3e..adeda72bee5 100644
--- a/net/inet/ipv6_setsockopt.c
+++ b/net/inet/ipv6_setsockopt.c
@@ -40,6 +40,7 @@
 #include "inet/inet.h"
 #include "socket/socket.h"
 #include "udp/udp.h"
+#include "utils/utils.h"
 
 #if defined(CONFIG_NET_IPv6) && defined(CONFIG_NET_SOCKOPTS)
 
@@ -83,7 +84,7 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
       return -EINVAL;
     }
 
-  net_lock();
+  conn_lock(psock->s_conn);
   switch (option)
     {
 #ifdef CONFIG_NET_MLD
@@ -231,7 +232,7 @@ int ipv6_setsockopt(FAR struct socket *psock, int option,
         break;
     }
 
-  net_unlock();
+  conn_unlock(psock->s_conn);
   return ret;
 }
 

Reply via email to