Merge remote-tracking branch 'upstream-public/pr/917' into mbedtls-1.3
diff --git a/ChangeLog b/ChangeLog
index 84324f2..5adcebb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,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.c b/library/net.c
index b42b86f..ad57c6a 100644
--- a/library/net.c
+++ b/library/net.c
@@ -404,13 +404,18 @@
  */
 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: