selftest/lkdtm: Skip stack-entropy test if lkdtm is not available
authorMisono Tomohiro <misono.tomohiro@jp.fujitsu.com>
Thu, 5 Aug 2021 10:12:36 +0000 (19:12 +0900)
committerKees Cook <keescook@chromium.org>
Thu, 16 Dec 2021 23:54:38 +0000 (15:54 -0800)
Exit with return code 4 if lkdtm is not available like other tests
in order to properly skip the test.

Signed-off-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20210805101236.1140381-1-misono.tomohiro@jp.fujitsu.com
tools/testing/selftests/lkdtm/stack-entropy.sh

index 1b4d95d575f8597ebb77bbec5125b70161e1f36c..14fedeef762ed091482d99ba5131d696daed4385 100755 (executable)
@@ -4,13 +4,27 @@
 # Measure kernel stack entropy by sampling via LKDTM's REPORT_STACK test.
 set -e
 samples="${1:-1000}"
+TRIGGER=/sys/kernel/debug/provoke-crash/DIRECT
+KSELFTEST_SKIP_TEST=4
+
+# Verify we have LKDTM available in the kernel.
+if [ ! -r $TRIGGER ] ; then
+       /sbin/modprobe -q lkdtm || true
+       if [ ! -r $TRIGGER ] ; then
+               echo "Cannot find $TRIGGER (missing CONFIG_LKDTM?)"
+       else
+               echo "Cannot write $TRIGGER (need to run as root?)"
+       fi
+       # Skip this test
+       exit $KSELFTEST_SKIP_TEST
+fi
 
 # Capture dmesg continuously since it may fill up depending on sample size.
 log=$(mktemp -t stack-entropy-XXXXXX)
 dmesg --follow >"$log" & pid=$!
 report=-1
 for i in $(seq 1 $samples); do
-        echo "REPORT_STACK" >/sys/kernel/debug/provoke-crash/DIRECT
+        echo "REPORT_STACK" > $TRIGGER
        if [ -t 1 ]; then
                percent=$(( 100 * $i / $samples ))
                if [ "$percent" -ne "$report" ]; then