File 0001-Resume-reading-from-randfile-when-interrupted-by-a-s.patch of Package openssl-1_1.14217

From c5ac41de1511f898301c298b2b28d05372cba817 Mon Sep 17 00:00:00 2001
From: Vitezslav Cizek <vcizek@suse.com>
Date: Thu, 8 Dec 2016 13:10:33 +0100
Subject: [PATCH] Resume reading from randfile when interrupted by a signal.

It was regularly observed with openssh:
sshd: fatal: cannot read from /dev/urandom, Interrupted system call
---
 crypto/rand/randfile.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/crypto/rand/randfile.c b/crypto/rand/randfile.c
index c96383a..6e39e86 100644
--- a/crypto/rand/randfile.c
+++ b/crypto/rand/randfile.c
@@ -104,6 +104,12 @@ static __FILE_ptr32 (*const vms_fopen)(const char *, const char *, ...) =
 
 #define RFILE ".rnd"
 
+#ifdef EINTR
+# define INTERRUPTED(in) (ferror(in) && errno == EINTR)
+#else
+# define INTERRUPTED (0)
+#endif
+
 /*
  * Note that these functions are intended for seed files only. Entropy
  * devices and EGD sockets are handled in rand_unix.c
@@ -162,9 +168,16 @@ int RAND_load_file(const char *file, long bytes)
             n = (bytes < BUFSIZE) ? (int)bytes : BUFSIZE;
         else
             n = BUFSIZE;
+
         i = fread(buf, 1, n, in);
-        if (i <= 0)
+        if (i <= 0) {
+            if (INTERRUPTED(in)) {
+                /* Interrupted by a signal, resume reading */
+                clearerr(in);
+                continue;
+            }
             break;
+        }
 
         RAND_add(buf, i, (double)i);
         ret += i;
-- 
2.10.2

openSUSE Build Service is sponsored by