Commit fe196783f7 for openssl.org
commit fe196783f75d3a70d584fa5e6f58da50d442cac4
Author: Liu-ErMeng <liuermeng2@huawei.com>
Date: Thu Apr 16 18:32:00 2026 -0700
sock_read: check ret==0 before BIO_sock_should_retry()
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)
diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c
index 86f823dd28..ef25ccada5 100644
--- a/crypto/bio/bss_sock.c
+++ b/crypto/bio/bss_sock.c
@@ -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;