[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 03/14] crypto: Do not fail for EINTR during q
From: |
Daniel P . Berrangé |
Subject: |
Re: [Qemu-devel] [PATCH v2 03/14] crypto: Do not fail for EINTR during qcrypto_random_bytes |
Date: |
Thu, 14 Mar 2019 15:34:19 +0000 |
User-agent: |
Mutt/1.11.3 (2019-02-01) |
On Wed, Mar 13, 2019 at 09:55:15PM -0700, Richard Henderson wrote:
> 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)) {
Not seeing a the need for the unlikely() call there - I'd
expect any benefit is dwarved by the read syscall time.
> + 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;
> }
Reviewed-by: Daniel P. Berrangé <address@hidden>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
- [Qemu-devel] [PATCH v2 00/14] Add qemu_getrandom and ARMv8.5-RNG, Richard Henderson, 2019/03/14
- [Qemu-devel] [PATCH v2 05/14] crypto: Use getrandom for qcrypto_random_bytes, Richard Henderson, 2019/03/14
- [Qemu-devel] [PATCH v2 10/14] linux-user: Call qcrypto_init if not using -seed, Richard Henderson, 2019/03/14
- [Qemu-devel] [PATCH v2 09/14] util: Use qcrypto_random_bytes for qemu_getrandom, Richard Henderson, 2019/03/14
- [Qemu-devel] [PATCH v2 07/14] ui/vnc: Use qcrypto_random_bytes for make_challenge, Richard Henderson, 2019/03/14