aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2022-04-20 15:38:46 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2022-04-20 15:43:00 +0200
commit3cb40f89de42aa694d44cb6e896b732fa062ee75 (patch)
tree2d9c6fb0abba89b022f8bb148e93a7409844c3db
parentce9a345632786d5585044ed71ed4c98c305b918f (diff)
downloadbusybox-w32-3cb40f89de42aa694d44cb6e896b732fa062ee75.tar.gz
busybox-w32-3cb40f89de42aa694d44cb6e896b732fa062ee75.tar.bz2
busybox-w32-3cb40f89de42aa694d44cb6e896b732fa062ee75.zip
seedrng: avoid needless runtime strlen() call
- Avoid needless runtime strlen() call, bloating binary. - Replace failed seed string with series of nulls. function old new delta .rodata 108350 108338 -12 static.seedrng_prefix 26 - -26 seedrng_main 1000 948 -52 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/2 up/down: 0/-90) Total: -90 bytes text data bss dec hex filename 975919 4227 1816 981962 efbca busybox_old 975829 4227 1816 981872 efb70 busybox_unstripped Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r--util-linux/seedrng.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/util-linux/seedrng.c b/util-linux/seedrng.c
index 49b9ab54b..5735dc059 100644
--- a/util-linux/seedrng.c
+++ b/util-linux/seedrng.c
@@ -21,7 +21,7 @@
21 */ 21 */
22 22
23//config:config SEEDRNG 23//config:config SEEDRNG
24//config: bool "seedrng (2.1 kb)" 24//config: bool "seedrng (2 kb)"
25//config: default y 25//config: default y
26//config: help 26//config: help
27//config: Seed the kernel RNG from seed files, meant to be called 27//config: Seed the kernel RNG from seed files, meant to be called
@@ -173,8 +173,6 @@ static int seed_from_file_if_exists(const char *filename, int dfd, bool credit,
173int seedrng_main(int argc, char *argv[]) MAIN_EXTERNALLY_VISIBLE; 173int seedrng_main(int argc, char *argv[]) MAIN_EXTERNALLY_VISIBLE;
174int seedrng_main(int argc UNUSED_PARAM, char *argv[]) 174int seedrng_main(int argc UNUSED_PARAM, char *argv[])
175{ 175{
176 static const char seedrng_prefix[] = "SeedRNG v1 Old+New Prefix";
177 static const char seedrng_failure[] = "SeedRNG v1 No New Seed Failure";
178 char *seed_dir, *creditable_seed, *non_creditable_seed; 176 char *seed_dir, *creditable_seed, *non_creditable_seed;
179 int ret, fd = -1, dfd = -1, program_ret = 0; 177 int ret, fd = -1, dfd = -1, program_ret = 0;
180 uint8_t new_seed[MAX_SEED_LEN]; 178 uint8_t new_seed[MAX_SEED_LEN];
@@ -218,7 +216,7 @@ int seedrng_main(int argc UNUSED_PARAM, char *argv[])
218 } 216 }
219 217
220 sha256_begin(&hash); 218 sha256_begin(&hash);
221 sha256_hash(&hash, seedrng_prefix, strlen(seedrng_prefix)); 219 sha256_hash(&hash, "SeedRNG v1 Old+New Prefix", 25);
222 clock_gettime(CLOCK_REALTIME, &timestamp); 220 clock_gettime(CLOCK_REALTIME, &timestamp);
223 sha256_hash(&hash, &timestamp, sizeof(timestamp)); 221 sha256_hash(&hash, &timestamp, sizeof(timestamp));
224 clock_gettime(CLOCK_BOOTTIME, &timestamp); 222 clock_gettime(CLOCK_BOOTTIME, &timestamp);
@@ -236,7 +234,7 @@ int seedrng_main(int argc UNUSED_PARAM, char *argv[])
236 if (ret < 0) { 234 if (ret < 0) {
237 bb_simple_perror_msg("unable to read new seed"); 235 bb_simple_perror_msg("unable to read new seed");
238 new_seed_len = SHA256_OUTSIZE; 236 new_seed_len = SHA256_OUTSIZE;
239 strncpy((char *)new_seed, seedrng_failure, new_seed_len); 237 memset(new_seed, 0, SHA256_OUTSIZE);
240 program_ret |= 1 << 3; 238 program_ret |= 1 << 3;
241 } 239 }
242 sha256_hash(&hash, &new_seed_len, sizeof(new_seed_len)); 240 sha256_hash(&hash, &new_seed_len, sizeof(new_seed_len));