From: Ricardo B. Marlière Date: Fri, 20 Mar 2026 18:29:19 +0000 (-0300) Subject: selftests/run_kselftest.sh: Allow choosing per-test log directory X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d6ea9f404b905ba7351d6b0e9ed611d9d0bf20f7;p=thirdparty%2Fkernel%2Flinux.git selftests/run_kselftest.sh: Allow choosing per-test log directory The --per-test-log option currently hard-codes /tmp. However, the system under test will most likely have tmpfs mounted there. Since it's not clear which filenames the log files will have, the user should be able to specify a persistent directory to store the logs. Keeping those logs are important because the run_kselftest.sh runner will only yield KTAP output, trimming information that is otherwise available through running individual tests directly. Allow --per-test-log to take an optional directory argument. Keep the existing behaviour when the option is passed without an argument, but if a directory is provided, create it if needed, reject non-directory paths and non-writable directories, canonicalize it, and have runner.sh write per-test logs there instead of /tmp. This also makes relative paths safe by resolving them before the runner changes into a collection directory. Signed-off-by: Ricardo B. Marlière Link: https://lore.kernel.org/r/20260320-selftests-fixes-v1-4-79144f76be01@suse.com Signed-off-by: Shuah Khan --- diff --git a/tools/testing/selftests/kselftest/runner.sh b/tools/testing/selftests/kselftest/runner.sh index 3eeec93c9da42..6da3390825fe6 100644 --- a/tools/testing/selftests/kselftest/runner.sh +++ b/tools/testing/selftests/kselftest/runner.sh @@ -6,6 +6,7 @@ export timeout_rc=124 export logfile=/dev/stdout export per_test_logging= +export per_test_log_dir=/tmp export RUN_IN_NETNS= # Defaults for "settings" file fields: @@ -196,7 +197,7 @@ run_many() BASENAME_TEST=$(basename $TEST) test_num=$(( test_num + 1 )) if [ -n "$per_test_logging" ]; then - logfile="/tmp/$BASENAME_TEST" + logfile="$per_test_log_dir/$BASENAME_TEST" cat /dev/null > "$logfile" fi if [ -n "$RUN_IN_NETNS" ]; then diff --git a/tools/testing/selftests/run_kselftest.sh b/tools/testing/selftests/run_kselftest.sh index 8fa808e10455e..e11b0e93ba41f 100755 --- a/tools/testing/selftests/run_kselftest.sh +++ b/tools/testing/selftests/run_kselftest.sh @@ -22,7 +22,7 @@ usage() cat <&2 + exit 1 + fi + if [ ! -d "$per_test_log_dir" ] && \ + ! mkdir -p "$per_test_log_dir"; then + echo "Could not create log dir:" \ + "$per_test_log_dir" >&2 + exit 1 + fi + per_test_log_dir=$(cd "$per_test_log_dir" && pwd -P) + if [ -z "$per_test_log_dir" ]; then + echo "Could not resolve per-test log directory" >&2 + exit 1 + fi + if [ ! -w "$per_test_log_dir" ]; then + echo "Per-test log dir is not writable:" \ + "$per_test_log_dir" >&2 + exit 1 + fi + shift 2 + else + shift + fi ;; -t | --test) TESTS="$TESTS $2" shift 2 ;;