From 2cbfd01c150420199a9cb74f5de72d7279e6cd11 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 30 Apr 2022 15:36:54 +0200 Subject: [PATCH] seedrng: code shrink Struct initializers do this double init: ># util-linux/seedrng.c:88: struct pollfd random_fd = { movl $0, 132(%esp) #, random_fd movl $0, 136(%esp) #, random_fd ... ># util-linux/seedrng.c:88: struct pollfd random_fd = { movl %eax, 140(%esp) # _110, random_fd.fd movw $1, 144(%esp) #, random_fd.events and close(random_fd.fd) needs to pull the item from the stack: pushl 132(%esp) # random_fd.fd call close # function old new delta seedrng_main 1076 1050 -26 Signed-off-by: Denys Vlasenko --- util-linux/seedrng.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/util-linux/seedrng.c b/util-linux/seedrng.c index 5559ba77c..023ed8688 100644 --- a/util-linux/seedrng.c +++ b/util-linux/seedrng.c @@ -85,14 +85,14 @@ static bool read_new_seed(uint8_t *seed, size_t len) return true; } if (ret < 0 && errno == ENOSYS) { - struct pollfd random_fd = { - .fd = xopen("/dev/random", O_RDONLY), - .events = POLLIN - }; + int fd = xopen("/dev/random", O_RDONLY); + struct pollfd random_fd; + random_fd.fd = fd; + random_fd.events = POLLIN; is_creditable = poll(&random_fd, 1, 0) == 1; //This is racy. is_creditable can be set to true here, but other process //can consume "good" random data from /dev/urandom before we do it below. - close(random_fd.fd); + close(fd); } else { if (getrandom(seed, len, GRND_INSECURE) == (ssize_t)len) return false;