diff --git a/ChangeLog b/ChangeLog index 84324f234..5adcebb79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,8 @@ Bugfix * Don't print X.509 version tag for v1 CRT's, and omit extensions for non-v3 CRT's. * Fix bugs in RSA test suite under MBEDTLS_NO_PLATFORM_ENTROPY. #1023 #1024 + * Fix net_would_block to avoid modification by errno through fcntl call. + Found by nkolban. Fixes #845. Changes * Extend cert_write example program by options to set the CRT version diff --git a/library/net.c b/library/net.c index b42b86f81..ad57c6a65 100644 --- a/library/net.c +++ b/library/net.c @@ -404,13 +404,18 @@ static int net_would_block( int fd ) */ static int net_would_block( int fd ) { + int err = errno; + /* * Never return 'WOULD BLOCK' on a non-blocking socket */ if( ( fcntl( fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) + { + errno = err; return( 0 ); + } - switch( errno ) + switch( errno = err ) { #if defined EAGAIN case EAGAIN: