From: Liu-ErMeng Date: Fri, 17 Apr 2026 01:32:00 +0000 (-0700) Subject: sock_read: check ret==0 before BIO_sock_should_retry() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe196783f75d3a70d584fa5e6f58da50d442cac4;p=thirdparty%2Fopenssl.git 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 Reviewed-by: Eugene Syromiatnikov 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 86f823dd28f..ef25ccada5c 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;