Merge remote-tracking branch 'upstream-public/pr/895' into development
diff --git a/ChangeLog b/ChangeLog
index 9c05d32..2b9aa14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -46,6 +46,8 @@
* 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_sockets.c b/library/net_sockets.c
index 31c42db..345f102 100644
--- a/library/net_sockets.c
+++ b/library/net_sockets.c
@@ -270,13 +270,18 @@
*/
static int net_would_block( const mbedtls_net_context *ctx )
{
+ int err = errno;
+
/*
* Never return 'WOULD BLOCK' on a non-blocking socket
*/
if( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK )
+ {
+ errno = err;
return( 0 );
+ }
- switch( errno )
+ switch( errno = err )
{
#if defined EAGAIN
case EAGAIN: