[PATCH v5] ws2_32: Return WSAEAFNOSUPPORT when ip4/6 disabled
Brendan McGrath
brendan at redmandi.com
Thu Nov 15 17:27:43 CST 2018
Currently, when IPv6 is disabled by the kernel, attempting to use
the 'WebRequest' API with .NET native causes a crash. This can be
recreated using the following gist:
https://gist.github.com/redmcg/7d81ef833c77bee6965b5f441006f697
This patch fixes the crash by returning WSAEAFNOSUPPORT, as expected
by .NET. See:
https://referencesource.microsoft.com/#System/net/System/Net/Sockets/Socket.cs,5995
Signed-off-by: Brendan McGrath <brendan at redmandi.com>
---
Changes since v4:
- from the server: map EAFNOSUPPORT from the kernel to STATUS_NOT_IMPLEMENTED
- in ws2_32: map STATUS_NOT_IMPLEMENTED to WSAEAFNOSUPPORT
It's still a bit ugly - but short of changing the design by removing the need
for a NTSTATUS - I'm not sure there's a better way.
dlls/ws2_32/socket.c | 1 +
server/sock.c | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index df068fe8527..1d433086f11 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1067,6 +1067,7 @@ static inline DWORD NtStatusToWSAError( const DWORD status )
case STATUS_BUFFER_OVERFLOW: wserr = WSAEMSGSIZE; break;
case STATUS_NOT_SUPPORTED: wserr = WSAEOPNOTSUPP; break;
case STATUS_HOST_UNREACHABLE: wserr = WSAEHOSTUNREACH; break;
+ case STATUS_NOT_IMPLEMENTED: wserr = WSAEAFNOSUPPORT; break;
default:
wserr = RtlNtStatusToDosError( status );
diff --git a/server/sock.c b/server/sock.c
index a8e6e28599b..dfcbab530fe 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -912,8 +912,8 @@ static int sock_get_ntstatus( int err )
case EPROTONOSUPPORT:
case ESOCKTNOSUPPORT:
case EPFNOSUPPORT:
- case EAFNOSUPPORT:
case EPROTOTYPE: return STATUS_NOT_SUPPORTED;
+ case EAFNOSUPPORT: return STATUS_NOT_IMPLEMENTED;
case ENOPROTOOPT: return STATUS_INVALID_PARAMETER;
case EOPNOTSUPP: return STATUS_NOT_SUPPORTED;
case EADDRINUSE: return STATUS_ADDRESS_ALREADY_ASSOCIATED;
--
2.17.1
More information about the wine-devel
mailing list