From e22e6bf0be675acdea39f9403875011ba2946fcf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lutz=20J=C3=A4nicke?= Date: Sat, 19 Feb 2005 10:17:26 +0000 Subject: [PATCH] Fix hang in EGD/PRNGD query when communication socket is closed prematurely by EGD/PRNGD. PR: 1014 Submitted by: Darren Tucker --- CHANGES | 4 ++++ apps/s_client.c | 2 ++ crypto/rand/rand_egd.c | 8 ++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index bedad8ac04..fe69f8fdb2 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,10 @@ Changes between 0.9.7e and 0.9.7f [XX xxx XXXX] + *) Fix hang in EGD/PRNGD query when communication socket is closed + prematurely by EGD/PRNGD. + [Darren Tucker via Lutz Jänicke, resolves #1014] + *) Prompt for pass phrases when appropriate for PKCS12 input format. [Steve Henson] diff --git a/apps/s_client.c b/apps/s_client.c index af8cb1a3f0..f72195e02d 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -595,6 +595,8 @@ re_start: if (starttls_proto == 1) { BIO_read(sbio,mbuf,BUFSIZZ); + BIO_printf(sbio,"EHLO some.host.name\r\n"); + BIO_read(sbio,mbuf,BUFSIZZ); BIO_printf(sbio,"STARTTLS\r\n"); BIO_read(sbio,sbuf,BUFSIZZ); } diff --git a/crypto/rand/rand_egd.c b/crypto/rand/rand_egd.c index 3ec2eabc2b..cd666abfcb 100644 --- a/crypto/rand/rand_egd.c +++ b/crypto/rand/rand_egd.c @@ -216,7 +216,9 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) while (numbytes != 1) { num = read(fd, egdbuf, 1); - if (num >= 0) + if (num == 0) + goto err; /* descriptor closed */ + else if (num > 0) numbytes += num; else { @@ -246,7 +248,9 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) while (numbytes != egdbuf[0]) { num = read(fd, retrievebuf + numbytes, egdbuf[0] - numbytes); - if (num >= 0) + if (num == 0) + goto err; /* descriptor closed */ + else if (num > 0) numbytes += num; else { -- 2.25.1