mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2025-01-12 08:05:31 +00:00
Fix fd range for select on Windows
Fix mbedtls_net_poll() and mbedtls_net_recv_timeout() often failing with MBEDTLS_ERR_NET_POLL_FAILED on Windows: they were testing that the file descriptor is in range for fd_set, but on Windows socket descriptors are not limited to a small range. Fixes #4465. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
0f6351f8a9
commit
51859aaff2
4
ChangeLog.d/winsock.txt
Normal file
4
ChangeLog.d/winsock.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Bugfix
|
||||||
|
* Fix mbedtls_net_poll() and mbedtls_net_recv_timeout() often failing with
|
||||||
|
MBEDTLS_ERR_NET_POLL_FAILED on Windows. Fixes #4465.
|
||||||
|
|
|
@ -145,12 +145,17 @@ static int check_fd( int fd, int for_select )
|
||||||
if( fd < 0 )
|
if( fd < 0 )
|
||||||
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
|
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
|
||||||
|
|
||||||
|
#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \
|
||||||
|
!defined(EFI32)
|
||||||
|
(void) for_select;
|
||||||
|
#else
|
||||||
/* A limitation of select() is that it only works with file descriptors
|
/* A limitation of select() is that it only works with file descriptors
|
||||||
* that are strictly less than FD_SETSIZE. This is a limitation of the
|
* that are strictly less than FD_SETSIZE. This is a limitation of the
|
||||||
* fd_set type. Error out early, because attempting to call FD_SET on a
|
* fd_set type. Error out early, because attempting to call FD_SET on a
|
||||||
* large file descriptor is a buffer overflow on typical platforms. */
|
* large file descriptor is a buffer overflow on typical platforms. */
|
||||||
if( for_select && fd >= FD_SETSIZE )
|
if( for_select && fd >= FD_SETSIZE )
|
||||||
return( MBEDTLS_ERR_NET_POLL_FAILED );
|
return( MBEDTLS_ERR_NET_POLL_FAILED );
|
||||||
|
#endif
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue