Skip to content

Commit

Permalink
Adopt S20urandom
Browse files Browse the repository at this point in the history
From buildroot/package/urandom-scripts/S20urandom
  • Loading branch information
ailispaw committed May 13, 2022
1 parent a18d381 commit a49473b
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions overlay/etc/init.d/S20urandom
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#! /bin/sh
#
# Preserve the random seed between reboots. See urandom(4).
#

# Quietly do nothing if /dev/urandom does not exist
[ -c /dev/urandom ] || exit 0

URANDOM_SEED="/var/lib/random-seed"

# shellcheck source=/dev/null
[ -r "/etc/default/urandom" ] && . "/etc/default/urandom"

if pool_bits=$(cat /proc/sys/kernel/random/poolsize 2> /dev/null); then
pool_size=$((pool_bits/8))
else
pool_size=512
fi

check_file_size() {
[ -f "$URANDOM_SEED" ] || return 1
# Try to read two blocks but exactly one will be read if the file has
# the correct size.
size=$(dd if="$URANDOM_SEED" bs="$pool_size" count=2 2> /dev/null | wc -c)
test "$size" -eq "$pool_size"
}

init_rng() {
if check_file_size; then
printf 'Initializing random number generator: '
dd if="$URANDOM_SEED" bs="$pool_size" of=/dev/urandom count=1 2> /dev/null
status=$?
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
return "$status"
fi
}

save_random_seed() {
printf 'Saving random seed: '
if touch "$URANDOM_SEED" 2> /dev/null; then
old_umask=$(umask)
umask 077
dd if=/dev/urandom of="$URANDOM_SEED" bs="$pool_size" count=1 2> /dev/null
status=$?
umask "$old_umask"
if [ "$status" -eq 0 ]; then
echo "OK"
else
echo "FAIL"
fi
else
status=$?
echo "SKIP (read-only file system detected)"
fi
return "$status"
}

case "$1" in
start|restart|reload)
# Carry a random seed from start-up to start-up
# Load and then save the whole entropy pool
init_rng && save_random_seed;;
stop)
# Carry a random seed from shut-down to start-up
# Save the whole entropy pool
save_random_seed;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac

0 comments on commit a49473b

Please sign in to comment.