Skip to content

Commit 6b58a7a

Browse files
authored
Merge pull request #112 from smuppand/rngtest-fix
rngtest: Add timeout for /dev/hwrng and fallback to /dev/urandom
2 parents 83740c5 + 95bb884 commit 6b58a7a

File tree

1 file changed

+22
-9
lines changed
  • Runner/suites/Kernel/FunctionalArea/baseport/rngtest

1 file changed

+22
-9
lines changed

Runner/suites/Kernel/FunctionalArea/baseport/rngtest/run.sh

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,34 @@ TMP_OUT="/tmp/rngtest_output.txt"
4444
ENTROPY_MB=10
4545
COUNT=1000
4646
PASS_THRESHOLD=997
47-
RNG_SOURCE="/dev/urandom"
48-
[ -e /dev/hwrng ] && RNG_SOURCE="/dev/hwrng"
47+
RNG_SOURCE=""
48+
RNG_TIMEOUT=10
4949

50-
log_info "Generating ${ENTROPY_MB}MB entropy input from $RNG_SOURCE"
51-
if ! dd if="$RNG_SOURCE" of="$TMP_BIN" bs=1M count="$ENTROPY_MB" status=none 2>/dev/null; then
52-
log_fail "$TESTNAME : Failed to read random data from $RNG_SOURCE"
53-
echo "$TESTNAME FAIL" > "$res_file"
54-
rm -f "$TMP_BIN"
55-
exit 1
50+
# Preferred order: hwrng -> urandom
51+
if [ -e /dev/hwrng ]; then
52+
log_info "Attempting to read $ENTROPY_MB MB entropy from /dev/hwrng with timeout $RNG_TIMEOUT sec"
53+
if timeout "$RNG_TIMEOUT" dd if=/dev/hwrng of="$TMP_BIN" bs=1M count="$ENTROPY_MB" status=none 2>/dev/null; then
54+
RNG_SOURCE="/dev/hwrng"
55+
log_info "Successfully read entropy from /dev/hwrng"
56+
else
57+
log_warn "/dev/hwrng read failed or timed out, falling back to /dev/urandom"
58+
fi
59+
fi
60+
61+
if [ -z "$RNG_SOURCE" ]; then
62+
log_info "Using fallback source: /dev/urandom"
63+
if ! dd if=/dev/urandom of="$TMP_BIN" bs=1M count="$ENTROPY_MB" status=none 2>/dev/null; then
64+
RNG_SOURCE="/dev/urandom"
65+
log_fail "$TESTNAME : Failed to read from /dev/urandom as fallback"
66+
echo "$TESTNAME FAIL" > "$res_file"
67+
rm -f "$TMP_BIN"
68+
exit 1
69+
fi
5670
fi
5771

5872
log_info "Running rngtest -c $COUNT < $TMP_BIN"
5973
rngtest -c "$COUNT" < "$TMP_BIN" > "$TMP_OUT" 2>&1
6074

61-
# Try to extract success count regardless of return code
6275
successes=$(awk '/FIPS 140-2 successes:/ {print $NF}' "$TMP_OUT" | head -n1)
6376

6477
if [ -z "$successes" ] || ! echo "$successes" | grep -Eq '^[0-9]+$'; then

0 commit comments

Comments
 (0)