]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
sock_read: check ret==0 before BIO_sock_should_retry()
authorLiu-ErMeng <liuermeng2@huawei.com>
Fri, 17 Apr 2026 01:32:00 +0000 (18:32 -0700)
committerNikola Pajkovsky <nikolap@openssl.org>
Mon, 20 Apr 2026 09:59:13 +0000 (11:59 +0200)
POSIX states errno is only valid when the return value indicates an
error.  recv() sets errno only on -1; when it returns 0 (peer closed)
errno is unspecified.

Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
MergeDate: Mon Apr 20 09:59:27 2026
(Merged from https://github.com/openssl/openssl/pull/30877)

crypto/bio/bss_sock.c

index 86f823dd28fa5cc0d7faf1826b49ead71d85c459..ef25ccada5ce874a32b1dd9e6f087521eacc424d 100644 (file)
@@ -118,10 +118,10 @@ static int sock_read(BIO *b, char *out, int outl)
             ret = readsocket(b->num, out, outl);
         BIO_clear_retry_flags(b);
         if (ret <= 0) {
-            if (BIO_sock_should_retry(ret))
-                BIO_set_retry_read(b);
-            else if (ret == 0)
+            if (ret == 0)
                 b->flags |= BIO_FLAGS_IN_EOF;
+            else if (BIO_sock_should_retry(ret))
+                BIO_set_retry_read(b);
         }
     }
     return ret;