Updated ws2_32-connect-already-connected patchset

This commit is contained in:
Alistair Leslie-Hughes 2021-07-03 22:22:11 +10:00
parent ce643e9d2a
commit 163f74fe61

View File

@ -0,0 +1,48 @@
From 105e57e403272c3e57a4836b5ed06c4651942a6e Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 3 Jul 2021 17:18:32 +1000
Subject: [PATCH] server: Explicitly forbid connecting a listening or connected
socket.
---
server/sock.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/server/sock.c b/server/sock.c
index befa9117c13..9fc66f95335 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -2161,12 +2161,25 @@ static int sock_ioctl( struct fd *fd, ioctl_code_t code, struct async *async )
return 0;
}
- if (sock->state == SOCK_CONNECTING)
+ switch (sock->state)
{
- /* FIXME: STATUS_ADDRESS_ALREADY_ASSOCIATED probably isn't right,
- * but there's no status code that maps to WSAEALREADY... */
- set_error( params->synchronous ? STATUS_ADDRESS_ALREADY_ASSOCIATED : STATUS_INVALID_PARAMETER );
- return 0;
+ case SOCK_LISTENING:
+ set_error( STATUS_INVALID_PARAMETER );
+ return 0;
+
+ case SOCK_CONNECTING:
+ /* FIXME: STATUS_ADDRESS_ALREADY_ASSOCIATED probably isn't right,
+ * but there's no status code that maps to WSAEALREADY... */
+ set_error( params->synchronous ? STATUS_ADDRESS_ALREADY_ASSOCIATED : STATUS_INVALID_PARAMETER );
+ return 0;
+
+ case SOCK_CONNECTED:
+ set_error( STATUS_CONNECTION_ACTIVE );
+ return 0;
+
+ case SOCK_UNCONNECTED:
+ case SOCK_CONNECTIONLESS:
+ break;
}
unix_len = sockaddr_to_unix( addr, params->addr_len, &unix_addr );
--
2.30.2