Additionally initialize fd_set's via memset in mbedtls_net_poll
The initialization via FD_SET is not seen by memory sanitizers if
FD_SET is implemented through assembly. Additionally zeroizing the
respective fd_set's before calling FD_SET contents the sanitizers
and comes at a negligible computational overhead.
diff --git a/library/net_sockets.c b/library/net_sockets.c
index cdc2376..f99d339 100644
--- a/library/net_sockets.c
+++ b/library/net_sockets.c
@@ -275,7 +275,7 @@
static int net_would_block( const mbedtls_net_context *ctx )
{
int err = errno;
-
+
/*
* Never return 'WOULD BLOCK' on a non-blocking socket
*/
@@ -459,6 +459,12 @@
if( fd < 0 )
return( MBEDTLS_ERR_NET_INVALID_CONTEXT );
+ /* Ensure that memory sanitizers consider
+ * read_fds and write_fds as initialized even
+ * if FD_ZERO is implemented in assembly. */
+ memset( &read_fds, 0, sizeof( read_fds ) );
+ memset( &write_fds, 0, sizeof( write_fds ) );
+
FD_ZERO( &read_fds );
if( rw & MBEDTLS_NET_POLL_READ )
{