printf '%s\n' "$TEST" > "$NFT_TEST_TESTTMPDIR/name"
+read tainted_before < /proc/sys/kernel/tainted
+
rc_test=0
"$TEST" &> "$NFT_TEST_TESTTMPDIR/testout.log" || rc_test=$?
$NFT list ruleset > "$NFT_TEST_TESTTMPDIR/ruleset-after"
+read tainted_after < /proc/sys/kernel/tainted
+
DUMPPATH="$TESTDIR/dumps"
DUMPFILE="$DUMPPATH/$TESTBASE.nft"
fi
fi
+if [ "$tainted_before" != "$tainted_after" ] ; then
+ echo "$tainted_after" > "$NFT_TEST_TESTTMPDIR/rc-failed-tainted"
+fi
+
rc_exit="$rc_test"
if [ -n "$rc_dump" ] && [ "$rc_dump" -ne 0 ] ; then
echo "$DUMPFILE" > "$NFT_TEST_TESTTMPDIR/rc-failed-dump"
# Special exit code to indicate dump diff.
rc_exit=124
fi
-elif [ "$rc_test" -eq 0 ] ; then
- echo "$rc_test" > "$NFT_TEST_TESTTMPDIR/rc-ok"
elif [ "$rc_test" -eq 77 ] ; then
echo "$rc_test" > "$NFT_TEST_TESTTMPDIR/rc-skipped"
+elif [ "$rc_test" -eq 0 -a "$tainted_before" = "$tainted_after" ] ; then
+ echo "$rc_test" > "$NFT_TEST_TESTTMPDIR/rc-ok"
else
echo "$rc_test" > "$NFT_TEST_TESTTMPDIR/rc-failed"
- if [ "$rc_test" -eq 124 ] ; then
+ if [ "$rc_test" -eq 0 -a "$tainted_before" != "$tainted_after" ] ; then
+ # Special exit code to indicate tainted.
+ rc_exit=123
+ elif [ "$rc_test" -eq 124 -o "$rc_test" -eq 123 ] ; then
+ # These exit codes are reserved
rc_exit=125
fi
fi
ok=0
skipped=0
failed=0
-taint=0
-
-check_taint()
-{
- read taint_now < /proc/sys/kernel/tainted
- if [ $taint -ne $taint_now ] ; then
- msg_warn "[FAILED] kernel is tainted: $taint -> $taint_now"
- fi
-}
kmem_runs=0
kmemleak_found=0
fi
}
-check_taint
+read kernel_tainted < /proc/sys/kernel/tainted
+if [ "$kernel_tainted" -ne 0 ] ; then
+ msg_warn "[FAILED] kernel is tainted"
+fi
print_test_header() {
local msglevel="$1"
TESTIDX=0
for testfile in "${TESTS[@]}" ; do
- read taint < /proc/sys/kernel/tainted
kernel_cleanup
((TESTIDX++))
print_test_result "$NFT_TEST_TESTTMPDIR" "$testfile" "$rc_got"
- check_taint
check_kmemleak
done