Fix hang in EGD/PRNGD query when communication socket is closed
authorLutz Jänicke <jaenicke@openssl.org>
Sat, 19 Feb 2005 10:19:07 +0000 (10:19 +0000)
committerLutz Jänicke <jaenicke@openssl.org>
Sat, 19 Feb 2005 10:19:07 +0000 (10:19 +0000)
prematurely by EGD/PRNGD.
PR: 1014
Submitted by: Darren Tucker <dtucker@zip.com.au>

CHANGES
crypto/rand/rand_egd.c

diff --git a/CHANGES b/CHANGES
index 28b0e29..4d766fb 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
  Changes between 0.9.7e and 0.9.7f  [XX xxx XXXX]
 
 
  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 <dtucker@zip.com.au> via Lutz Jänicke, resolves #1014]
+
   *) Prompt for pass phrases when appropriate for PKCS12 input format.
      [Steve Henson]
 
   *) Prompt for pass phrases when appropriate for PKCS12 input format.
      [Steve Henson]
 
index e34f07c..50bce6c 100644 (file)
@@ -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);
            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
                    {
                    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);
            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
                    {
                    numbytes += num;
                else
                    {