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


The following commit(s) were added to refs/heads/master by this push:
     new 1072b5b564 net: Limit max value for Send/Recv bufsize
1072b5b564 is described below

commit 1072b5b564623d8efca5230c952eed8124c498b9
Author: Zhe Weng <[email protected]>
AuthorDate: Mon Jul 3 18:16:13 2023 +0800

    net: Limit max value for Send/Recv bufsize
    
    There're some apps trying to set too large SO_SNDBUF and SO_RCVBUF, which 
may use all IOBs in one socket and block all other network traffic.
    
    Note:
    Linux silently limits SO_SNDBUF to be less than `sysctl_wmem_max`, so we 
can also do this limit without returning any error.
    
    Signed-off-by: Zhe Weng <[email protected]>
---
 net/Kconfig            | 20 ++++++++++++++++++--
 net/inet/inet_sockif.c |  8 ++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/net/Kconfig b/net/Kconfig
index c5d1d40d77..82ac9eb7a6 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -128,18 +128,34 @@ config NET_LL_GUARDSIZE
                to L3 network layer protocol transparent transmission and 
forwarding
 
 config NET_RECV_BUFSIZE
-       int "Net Receive buffer size"
+       int "Net Default Receive buffer size"
        default 0
        ---help---
                This is the default value for receive buffer size.
 
+config NET_MAX_RECV_BUFSIZE
+       int "Net Max Receive buffer size"
+       depends on NET_RECV_BUFSIZE > 0
+       default 0
+       ---help---
+               Limit the max value for receive buffer size to avoid 
overconsumption.
+               Zero means no limit.
+
 config NET_SEND_BUFSIZE
-       int "Net Send buffer size"
+       int "Net Default Send buffer size"
        depends on NET_TCP_WRITE_BUFFERS || NET_UDP_WRITE_BUFFERS
        default 0
        ---help---
                This is the default value for send buffer size.
 
+config NET_MAX_SEND_BUFSIZE
+       int "Net Max Send buffer size"
+       depends on NET_SEND_BUFSIZE > 0
+       default 0
+       ---help---
+               Limit the max value for send buffer size to avoid 
overconsumption.
+               Zero means no limit.
+
 endmenu # Driver buffer configuration
 
 menu "Link layer support"
diff --git a/net/inet/inet_sockif.c b/net/inet/inet_sockif.c
index 46c612e706..4026245405 100644
--- a/net/inet/inet_sockif.c
+++ b/net/inet/inet_sockif.c
@@ -929,6 +929,10 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
               return -EINVAL;
             }
 
+#if CONFIG_NET_MAX_RECV_BUFSIZE > 0
+          buffersize = MIN(buffersize, CONFIG_NET_MAX_RECV_BUFSIZE);
+#endif
+
           net_lock();
 
 #ifdef NET_TCP_HAVE_STACK
@@ -986,6 +990,10 @@ static int inet_set_socketlevel_option(FAR struct socket 
*psock, int option,
               return -EINVAL;
             }
 
+#if CONFIG_NET_MAX_SEND_BUFSIZE > 0
+          buffersize = MIN(buffersize, CONFIG_NET_MAX_SEND_BUFSIZE);
+#endif
+
           net_lock();
 
 #ifdef NET_TCP_HAVE_STACK

Reply via email to