selftests: net: lib: Do not overwrite error messages

[ Upstream commit bed22c7b90 ]

ret_set_ksft_status() calls ksft_status_merge() with the current return
status and the last one. It treats a non-zero return code from
ksft_status_merge() as an indication that the return status was
overwritten by the last one and therefore overwrites the return message
with the last one.

Currently, ksft_status_merge() returns a non-zero return code even if
the current return status and the last one are equal. This results in
return messages being overwritten which is counter-productive since we
are more interested in the first failure message and not the last one.

Fix by changing ksft_status_merge() to only return a non-zero return
code if the current return status was actually changed.

Add a test case which checks that the first error message is not
overwritten.

Before:

 # ./lib_sh_test.sh
 [...]
 TEST: RET tfail2 tfail -> fail                                      [FAIL]
        retmsg=tfail expected tfail2
 [...]
 # echo $?
 1

After:

 # ./lib_sh_test.sh
 [...]
 TEST: RET tfail2 tfail -> fail                                      [ OK ]
 [...]
 # echo $?
 0

Fixes: 596c8819cb ("selftests: forwarding: Have RET track kselftest framework constants")
Reviewed-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20251116081029.69112-1-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Ido Schimmel
2025-11-16 10:10:29 +02:00
committed by Greg Kroah-Hartman
parent b9dbfb1b56
commit 01a726aaa8
2 changed files with 8 additions and 1 deletions

View File

@@ -30,6 +30,11 @@ tfail()
do_test "tfail" false
}
tfail2()
{
do_test "tfail2" false
}
txfail()
{
FAIL_TO_XFAIL=yes do_test "txfail" false
@@ -132,6 +137,8 @@ test_ret()
ret_subtest $ksft_fail "tfail" txfail tfail
ret_subtest $ksft_xfail "txfail" txfail txfail
ret_subtest $ksft_fail "tfail2" tfail2 tfail
}
exit_status_tests_run()

View File

@@ -40,7 +40,7 @@ __ksft_status_merge()
weights[$i]=$((weight++))
done
if [[ ${weights[$a]} > ${weights[$b]} ]]; then
if [[ ${weights[$a]} -ge ${weights[$b]} ]]; then
echo "$a"
return 0
else