From dd4adacee89a2e6d63a7a5d86e022b9339675a21 Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Tue, 10 Aug 2021 12:40:04 +0200 Subject: [PATCH] Code review changes --- src/ssl.c | 13 ++++++---- src/wolfio.c | 46 ++++++++++++++-------------------- wolfssl/openssl/compat_types.h | 3 ++- wolfssl/wolfio.h | 6 ++--- 4 files changed, 31 insertions(+), 37 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 25e148ac6..12a455d71 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -54967,8 +54967,8 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value) else port = str + XSTRLEN(str); /* point to null terminator */ - bio->ip = (char*)XMALLOC(1 + port - str, bio->heap, - DYNAMIC_TYPE_OPENSSL); + bio->ip = (char*)XMALLOC((port - str) + 1, /* +1 for null char */ + bio->heap, DYNAMIC_TYPE_OPENSSL); XMEMCPY(bio->ip, str, port - str); bio->ip[port - str] = '\0'; bio->type = WOLFSSL_BIO_SOCKET; @@ -55055,13 +55055,14 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value) return WOLFSSL_SUCCESS; } +#ifdef HAVE_SOCKADDR int wolfSSL_BIO_do_accept(WOLFSSL_BIO *b) { SOCKET_T sfd = SOCKET_INVALID; WOLFSSL_ENTER("wolfSSL_BIO_do_accept"); if (!b) { - WOLFSSL_ENTER("Bad parameter"); + WOLFSSL_MSG("Bad parameter"); return WOLFSSL_FAILURE; } @@ -55102,13 +55103,15 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value) /* Push onto bio chain for user retrieval */ if (wolfSSL_BIO_push(b, new_bio) == NULL) { WOLFSSL_ENTER("wolfSSL_BIO_push error"); - CloseSocket(newfd); + /* newfd is closed when bio is free'd */ + wolfSSL_BIO_free(new_bio); return WOLFSSL_FAILURE; } } return WOLFSSL_SUCCESS; } +#endif /* HAVE_SOCKADDR */ #endif /* HAVE_HTTP_CLIENT */ int wolfSSL_BIO_eof(WOLFSSL_BIO* b) @@ -55312,7 +55315,7 @@ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value) #ifdef CloseSocket if (bio->type == WOLFSSL_BIO_SOCKET && bio->num) CloseSocket(bio->num); - #endif + #endif } #ifndef NO_FILESYSTEM diff --git a/src/wolfio.c b/src/wolfio.c index 73b21df38..6f544bb62 100644 --- a/src/wolfio.c +++ b/src/wolfio.c @@ -865,6 +865,7 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec) int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) { #ifdef HAVE_SOCKADDR + int ret = 0; SOCKADDR_S addr; int sockaddr_len = sizeof(SOCKADDR_IN); SOCKADDR_IN *sin = (SOCKADDR_IN *)&addr; @@ -880,39 +881,34 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) sin->sin_port = XHTONS(port); *sockfd = (SOCKET_T)socket(AF_INET, SOCK_STREAM, 0); + if (*sockfd < 0) { + WOLFSSL_MSG("socket failed"); + *sockfd = SOCKET_INVALID; + return -1; + } + #if !defined(USE_WINDOWS_API) && !defined(WOLFSSL_MDK_ARM)\ && !defined(WOLFSSL_KEIL_TCP_NET) && !defined(WOLFSSL_ZEPHYR) { int optval = 1; -#ifndef USE_WINDOWS_API - socklen_t optlen = sizeof(optval); -#else - int optlen = sizeof(optval); -#endif - if (setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen) < 0) { - WOLFSSL_MSG("setsockopt SO_REUSEADDR failed"); - CloseSocket(*sockfd); - *sockfd = SOCKET_INVALID; - return -1; - } + XSOCKLENT optlen = sizeof(optval); + ret = setsockopt(*sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen); } #endif - if (bind(*sockfd, (SOCKADDR *)sin, sockaddr_len) != 0) { - WOLFSSL_MSG("tcp bind failed"); + if (ret == 0) + ret = bind(*sockfd, (SOCKADDR *)sin, sockaddr_len); + if (ret == 0) + ret = listen(*sockfd, SOMAXCONN); + + if (ret != 0) { + WOLFSSL_MSG("wolfIO_TcpBind failed"); CloseSocket(*sockfd); *sockfd = SOCKET_INVALID; - return -1; + ret = -1; } - if (listen(*sockfd, SOMAXCONN) != 0) { - WOLFSSL_MSG("tcp listen failed"); - CloseSocket(*sockfd); - *sockfd = SOCKET_INVALID; - return -1; - } - - return 0; + return ret; #else (void)sockfd; (void)port; @@ -921,11 +917,7 @@ int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port) } #ifdef HAVE_SOCKADDR -#ifndef USE_WINDOWS_API -int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, socklen_t* peer_len) -#else -int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, int* peer_len) -#endif +int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, XSOCKLENT* peer_len) { return accept(sockfd, peer_addr, peer_len); } diff --git a/wolfssl/openssl/compat_types.h b/wolfssl/openssl/compat_types.h index a2a73a04f..8d80cebbd 100644 --- a/wolfssl/openssl/compat_types.h +++ b/wolfssl/openssl/compat_types.h @@ -26,8 +26,9 @@ #ifndef WOLFSSL_OPENSSL_COMPAT_TYPES_H_ #define WOLFSSL_OPENSSL_COMPAT_TYPES_H_ -#include +#include #include +#include typedef struct WOLFSSL_HMAC_CTX { Hmac hmac; diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index 7e7355bfb..a6363f5cf 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -373,10 +373,8 @@ #endif WOLFSSL_API int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, unsigned short port, int to_sec); -#ifndef USE_WINDOWS_API -WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, socklen_t* peer_len); -#else -WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, int* peer_len); +#ifdef HAVE_SOCKADDR +WOLFSSL_API int wolfIO_TcpAccept(SOCKET_T sockfd, SOCKADDR* peer_addr, XSOCKLENT* peer_len); #endif WOLFSSL_API int wolfIO_TcpBind(SOCKET_T* sockfd, word16 port); WOLFSSL_API int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags);