From f732630141b7ae838255f836d095946cdb419252 Mon Sep 17 00:00:00 2001 From: Peter Hater <7element@mail.bg> Date: Thu, 25 May 2017 14:42:24 +0000 Subject: [PATCH] [WS2_32] Add some parameters check for getsockname. Use value size for size check instead of type in bind. ROSTEST-278 svn path=/trunk/; revision=74650 --- reactos/dll/win32/ws2_32/src/sockctrl.c | 30 ++++++++++++++++--------- reactos/dll/win32/ws2_32/src/socklife.c | 2 +- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/ws2_32/src/sockctrl.c b/reactos/dll/win32/ws2_32/src/sockctrl.c index 0aa512a09ae..1bf9e821249 100644 --- a/reactos/dll/win32/ws2_32/src/sockctrl.c +++ b/reactos/dll/win32/ws2_32/src/sockctrl.c @@ -217,20 +217,28 @@ getsockname(IN SOCKET s, /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { - /* Make the call */ - Status = Socket->Provider->Service.lpWSPGetSockName(s, - name, - namelen, - &ErrorCode); + if (name && namelen && (*namelen >= sizeof(*name))) + { + /* Make the call */ + Status = Socket->Provider->Service.lpWSPGetSockName(s, + name, + namelen, + &ErrorCode); - /* Deference the Socket Context */ - WsSockDereference(Socket); + /* Deference the Socket Context */ + WsSockDereference(Socket); - /* Return Provider Value */ - if (Status == ERROR_SUCCESS) return Status; + /* Return Provider Value */ + if (Status == ERROR_SUCCESS) return Status; - /* If everything seemed fine, then the WSP call failed itself */ - if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; + /* If everything seemed fine, then the WSP call failed itself */ + if (ErrorCode == NO_ERROR) ErrorCode = WSASYSCALLFAILURE; + } + else + { + /* name or namelen not valid */ + ErrorCode = WSAEFAULT; + } } else { diff --git a/reactos/dll/win32/ws2_32/src/socklife.c b/reactos/dll/win32/ws2_32/src/socklife.c index 86a12c6017a..50f559f498d 100644 --- a/reactos/dll/win32/ws2_32/src/socklife.c +++ b/reactos/dll/win32/ws2_32/src/socklife.c @@ -48,7 +48,7 @@ bind(IN SOCKET s, /* Get the Socket Context */ if ((Socket = WsSockGetSocket(s))) { - if (name && (namelen >= sizeof(struct sockaddr))) + if (name && (namelen >= sizeof(*name))) { /* Make the call */ Status = Socket->Provider->Service.lpWSPBind(s, -- 2.17.1