diff options
author | Lennart Poettering <lennart@poettering.net> | 2020-06-11 09:53:29 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2020-06-24 15:33:27 +0200 |
commit | 4dd055f907eda30b95c9cdd0b822120bbf646ecf (patch) | |
tree | 8ca8249ef5b8f4dcfc98a59b2983150d7bf8e59a /src/core/efi-random.c | |
parent | 45250e66cc68fe238acbf8889a7797829fa0e9d4 (diff) | |
download | systemd-4dd055f907eda30b95c9cdd0b822120bbf646ecf.tar.gz |
random-util: add common helper random_write_entropy() for crediting entropy to the kernel's pool
Diffstat (limited to 'src/core/efi-random.c')
-rw-r--r-- | src/core/efi-random.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/src/core/efi-random.c b/src/core/efi-random.c index c4d25d68e4..b6609e63e5 100644 --- a/src/core/efi-random.c +++ b/src/core/efi-random.c @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ #include <fcntl.h> -#include <linux/random.h> -#include <sys/ioctl.h> #include <unistd.h> #include "alloc-util.h" @@ -11,6 +9,7 @@ #include "efivars.h" #include "fd-util.h" #include "fs-util.h" +#include "random-util.h" #include "strv.h" /* If a random seed was passed by the boot loader in the LoaderRandomSeed EFI variable, let's credit it to @@ -43,7 +42,6 @@ static void lock_down_efi_variables(void) { } int efi_take_random_seed(void) { - _cleanup_free_ struct rand_pool_info *info = NULL; _cleanup_free_ void *value = NULL; _cleanup_close_ int random_fd = -1; size_t size; @@ -79,11 +77,6 @@ int efi_take_random_seed(void) { if (size == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Random seed passed from boot loader has zero size? Ignoring."); - /* The kernel API only accepts "int" as entropy count (which is in bits), let's avoid any chance for - * confusion here. */ - if (size > INT_MAX / 8) - size = INT_MAX / 8; - random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY); if (random_fd < 0) return log_warning_errno(errno, "Failed to open /dev/urandom for writing, ignoring: %m"); @@ -94,15 +87,8 @@ int efi_take_random_seed(void) { if (r < 0) return log_warning_errno(r, "Unable to mark EFI random seed as used, not using it: %m"); - info = malloc(offsetof(struct rand_pool_info, buf) + size); - if (!info) - return log_oom(); - - info->entropy_count = size * 8; - info->buf_size = size; - memcpy(info->buf, value, size); - - if (ioctl(random_fd, RNDADDENTROPY, info) < 0) + r = random_write_entropy(random_fd, value, size, true); + if (r < 0) return log_warning_errno(errno, "Failed to credit entropy, ignoring: %m"); log_info("Successfully credited entropy passed from boot loader."); |