diff options
Diffstat (limited to 'thirdparty/mbedtls/library/net_sockets.c')
| -rw-r--r-- | thirdparty/mbedtls/library/net_sockets.c | 14 | 
1 files changed, 14 insertions, 0 deletions
| diff --git a/thirdparty/mbedtls/library/net_sockets.c b/thirdparty/mbedtls/library/net_sockets.c index 1130408263..671115f15f 100644 --- a/thirdparty/mbedtls/library/net_sockets.c +++ b/thirdparty/mbedtls/library/net_sockets.c @@ -496,6 +496,13 @@ int mbedtls_net_poll( mbedtls_net_context *ctx, uint32_t rw, uint32_t timeout )      if( fd < 0 )          return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); +    /* 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 +     * fd_set type. Error out early, because attempting to call FD_SET on a +     * large file descriptor is a buffer overflow on typical platforms. */ +    if( fd >= FD_SETSIZE ) +        return( MBEDTLS_ERR_NET_POLL_FAILED ); +  #if defined(__has_feature)  #if __has_feature(memory_sanitizer)      /* Ensure that memory sanitizers consider read_fds and write_fds as @@ -615,6 +622,13 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf,      if( fd < 0 )          return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); +    /* 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 +     * fd_set type. Error out early, because attempting to call FD_SET on a +     * large file descriptor is a buffer overflow on typical platforms. */ +    if( fd >= FD_SETSIZE ) +        return( MBEDTLS_ERR_NET_POLL_FAILED ); +      FD_ZERO( &read_fds );      FD_SET( fd, &read_fds ); |