summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2022-05-01 02:06:20 +0200
committerDenys Vlasenko2022-05-01 02:06:20 +0200
commit74716580380d609165cc0be1ae37ee52d77243b2 (patch)
treeb8b04c6a9d992c7360af1511a7dde16c15af6553
parentfb4546c7af3d1d2f11fb7851b56104f5580f328f (diff)
downloadbusybox-74716580380d609165cc0be1ae37ee52d77243b2.zip
busybox-74716580380d609165cc0be1ae37ee52d77243b2.tar.gz
seedrng: do not hash lengths, they are very predictable
function old new delta seedrng_main 982 930 -52 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--util-linux/seedrng.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/util-linux/seedrng.c b/util-linux/seedrng.c
index 3074e9a..2965f3d 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);