From 74716580380d609165cc0be1ae37ee52d77243b2 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 1 May 2022 02:06:20 +0200 Subject: [PATCH] seedrng: do not hash lengths, they are very predictable function old new delta seedrng_main 982 930 -52 Signed-off-by: Denys Vlasenko --- util-linux/seedrng.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/util-linux/seedrng.c b/util-linux/seedrng.c index 3074e9a58..2965f3d47 100644 --- a/util-linux/seedrng.c +++ b/util-linux/seedrng.c @@ -151,7 +151,8 @@ static void seed_from_file_if_exists(const char *filename, int dfd, bool credit, */ fsync(dfd); - sha256_hash(hash, &seed_len, sizeof(seed_len)); +//Length is not random, and taking its address spills variable to stack +// sha256_hash(hash, &seed_len, sizeof(seed_len)); sha256_hash(hash, seed, seed_len); printf("Seeding %u bits %s crediting\n", (unsigned)seed_len * 8, credit ? "and" : "without"); @@ -220,7 +221,8 @@ int seedrng_main(int argc UNUSED_PARAM, char *argv[]) new_seed_len = determine_optimal_seed_len(); new_seed_creditable = read_new_seed(new_seed, new_seed_len); - sha256_hash(&hash, &new_seed_len, sizeof(new_seed_len)); +//Length is not random, and taking its address spills variable to stack +// sha256_hash(&hash, &new_seed_len, sizeof(new_seed_len)); sha256_hash(&hash, new_seed, new_seed_len); sha256_end(&hash, new_seed + new_seed_len - SHA256_OUTSIZE); @@ -230,7 +232,7 @@ int seedrng_main(int argc UNUSED_PARAM, char *argv[]) xwrite(fd, new_seed, new_seed_len); if (new_seed_creditable) { /* More paranoia when we create a file which we believe contains - * genuine entropy: make sure disk is not full, quota was't esceeded, etc: + * genuine entropy: make sure disk is not full, quota was't exceeded, etc: */ if (fsync(fd) < 0) bb_perror_msg_and_die("can't write '%s'", NON_CREDITABLE_SEED_NAME);