diff --git a/include/poll.h b/include/poll.h index f6ec3ac97a0..5c8748db3ab 100644 --- a/include/poll.h +++ b/include/poll.h @@ -41,6 +41,7 @@ ****************************************************************************/ #include +#include #include #include diff --git a/net/socket/getsockopt.c b/net/socket/getsockopt.c index 20ece722038..eef6e0f790c 100644 --- a/net/socket/getsockopt.c +++ b/net/socket/getsockopt.c @@ -101,6 +101,13 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, return -EINVAL; } + /* Verify that the sockfd corresponds to valid, allocated socket */ + + if (psock == NULL || psock->s_crefs <= 0) + { + return -EBADF; + } + #ifdef CONFIG_NET_USRSOCK if (psock->s_type == SOCK_USRSOCK_TYPE) { @@ -410,14 +417,8 @@ int getsockopt(int sockfd, int level, int option, void *value, socklen_t *value_ int ret; /* Get the underlying socket structure */ - /* Verify that the sockfd corresponds to valid, allocated socket */ psock = sockfd_socket(sockfd); - if (!psock || psock->s_crefs <= 0) - { - set_errno(EBADF); - return ERROR; - } /* Then let psock_getsockopt() do all of the work */ diff --git a/net/socket/setsockopt.c b/net/socket/setsockopt.c index 610ba83729a..b2a9357cdba 100644 --- a/net/socket/setsockopt.c +++ b/net/socket/setsockopt.c @@ -95,6 +95,13 @@ static int psock_socketlevel_option(FAR struct socket *psock, int option, return -EINVAL; } + /* Verify that the sockfd corresponds to valid, allocated socket */ + + if (psock == NULL || psock->s_crefs <= 0) + { + return -EBADF; + } + #ifdef CONFIG_NET_USRSOCK if (psock->s_type == SOCK_USRSOCK_TYPE) { @@ -450,14 +457,8 @@ int setsockopt(int sockfd, int level, int option, const void *value, socklen_t v int ret; /* Get the underlying socket structure */ - /* Verify that the sockfd corresponds to valid, allocated socket */ psock = sockfd_socket(sockfd); - if (!psock || psock->s_crefs <= 0) - { - set_errno(EBADF); - return ERROR; - } /* Then let psock_setockopt() do all of the work */