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 <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2022-04-30 15:36:54 +02:00
parent 52f3cf7e5f
commit 2cbfd01c15

View File

@ -85,14 +85,14 @@ static bool read_new_seed(uint8_t *seed, size_t len)
return true; return true;
} }
if (ret < 0 && errno == ENOSYS) { if (ret < 0 && errno == ENOSYS) {
struct pollfd random_fd = { int fd = xopen("/dev/random", O_RDONLY);
.fd = xopen("/dev/random", O_RDONLY), struct pollfd random_fd;
.events = POLLIN random_fd.fd = fd;
}; random_fd.events = POLLIN;
is_creditable = poll(&random_fd, 1, 0) == 1; is_creditable = poll(&random_fd, 1, 0) == 1;
//This is racy. is_creditable can be set to true here, but other process //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. //can consume "good" random data from /dev/urandom before we do it below.
close(random_fd.fd); close(fd);
} else { } else {
if (getrandom(seed, len, GRND_INSECURE) == (ssize_t)len) if (getrandom(seed, len, GRND_INSECURE) == (ssize_t)len)
return false; return false;