qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v2 03/14] crypto: Do not fail for EINTR during qcryp


From: Richard Henderson
Subject: [Qemu-devel] [PATCH v2 03/14] crypto: Do not fail for EINTR during qcrypto_random_bytes
Date: Wed, 13 Mar 2019 21:55:15 -0700

We can always get EINTR for read; /dev/urandom is no exception.
Clean up return paths and avoid unnecessary goto.

Cc: Daniel P. Berrangé <address@hidden>
Signed-off-by: Richard Henderson <address@hidden>
---
 crypto/random-platform.c | 33 +++++++++++++--------------------
 1 file changed, 13 insertions(+), 20 deletions(-)

diff --git a/crypto/random-platform.c b/crypto/random-platform.c
index f995fc0ef1..0866f216dc 100644
--- a/crypto/random-platform.c
+++ b/crypto/random-platform.c
@@ -65,29 +65,22 @@ int qcrypto_random_bytes(uint8_t *buf G_GNUC_UNUSED,
                          "Unable to read random bytes");
         return -1;
     }
-
-    return 0;
 #else
-    int ret = -1;
-    int got;
-
     while (buflen > 0) {
-        got = read(fd, buf, buflen);
-        if (got < 0) {
-            error_setg_errno(errp, errno,
-                             "Unable to read random bytes");
-            goto cleanup;
-        } else if (!got) {
-            error_setg(errp,
-                       "Unexpected EOF reading random bytes");
-            goto cleanup;
+        ssize_t got = read(fd, buf, buflen);
+        if (unlikely(got <= 0)) {
+            if (got == 0) {
+                error_setg(errp, "Unexpected EOF reading random bytes");
+                return -1;
+            } else if (errno != EINTR) {
+                error_setg_errno(errp, errno, "Unable to read random bytes");
+                return -1;
+            }
+        } else {
+            buflen -= got;
+            buf += got;
         }
-        buflen -= got;
-        buf += got;
     }
-
-    ret = 0;
- cleanup:
-    return ret;
 #endif
+    return 0;
 }
-- 
2.17.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]