From ec8cc6db37ab4d5aef1f347cb3677c2ab2e6fe8c Mon Sep 17 00:00:00 2001 From: zhanghongyu Date: Mon, 28 Nov 2022 21:35:08 +0800 Subject: [PATCH] net: add parameter check in psock_setsockopt 0 0x565a60bd in memmove (dest=0xf7fbaabe, src=0x0, count=3) at string/lib_memmove.c:58 1 0x565d8b90 in usrsock_iovec_do (srcdst=0xf7fbaab0, srcdstlen=2018, iov=0xf3de798c, iovcnt=0, pos=0, from_iov=true, done=0xf3de78e7) at usrsock/usrsock_devif.c:155 2 0x565d9349 in usrsock_iovec_get (dst=0xf7fbaab0, dstlen=2032, iov=0xf3de797c, iovcnt=2, pos=0, done=0xf3de78e7) at usrsock/usrsock_devif.c:612 3 0x5659f4b9 in usrsock_request (iov=0xf3de797c, iovcnt=2) at usrsock/usrsock_rpmsg.c:210 4 0x565d9436 in usrsock_do_request (conn=0x566316c0 , iov=0xf3de797c, iovcnt=2) at usrsock/usrsock_devif.c:659 5 0x565dcfe9 in do_setsockopt_request (conn=0x566316c0 , level=1, option=7, value=0x0, value_len=4) at usrsock/usrsock_setsockopt.c:131 6 0x565dd11e in usrsock_setsockopt (psock=0xf3dea840, level=1, option=7, value=0x0, value_len=4) at usrsock/usrsock_setsockopt.c:208 7 0x565d4d31 in psock_setsockopt (psock=0xf3dea840, level=1, option=7, value=0x0, value_len=4) at socket/setsockopt.c:310 8 0x565d4dde in setsockopt (sockfd=3, level=1, option=7, value=0x0, value_len=4) at socket/setsockopt.c:396 Signed-off-by: zhanghongyu --- net/socket/setsockopt.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/net/socket/setsockopt.c b/net/socket/setsockopt.c index c6edf82aa99..2e1e5df8099 100644 --- a/net/socket/setsockopt.c +++ b/net/socket/setsockopt.c @@ -74,13 +74,6 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, { FAR struct socket_conn_s *conn = psock->s_conn; - /* Verify that the socket option if valid (but might not be supported ) */ - - if (!value) - { - return -EFAULT; - } - /* Process the options always handled locally */ switch (option) @@ -296,6 +289,13 @@ int psock_setsockopt(FAR struct socket *psock, int level, int option, { int ret = -ENOPROTOOPT; + /* Verify that the socket option if valid (but might not be supported ) */ + + if (!value) + { + return -EFAULT; + } + /* Verify that the sockfd corresponds to valid, allocated socket */ if (psock == NULL || psock->s_conn == NULL)