lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251025160905.3857885-386-sashal@kernel.org>
Date: Sat, 25 Oct 2025 12:00:17 -0400
From: Sasha Levin <sashal@...nel.org>
To: patches@...ts.linux.dev,
	stable@...r.kernel.org
Cc: Ido Schimmel <idosch@...dia.com>,
	Petr Machata <petrm@...dia.com>,
	David Ahern <dsahern@...nel.org>,
	Paolo Abeni <pabeni@...hat.com>,
	Sasha Levin <sashal@...nel.org>,
	davem@...emloft.net,
	edumazet@...gle.com,
	kuba@...nel.org,
	netdev@...r.kernel.org
Subject: [PATCH AUTOSEL 6.17-6.12] selftests: traceroute: Return correct value on failure

From: Ido Schimmel <idosch@...dia.com>

[ Upstream commit c068ba9d3ded56cb1ba4d5135ee84bf8039bd563 ]

The test always returns success even if some tests were modified to
fail. Fix by converting the test to use the appropriate library
functions instead of using its own functions.

Before:

 # ./traceroute.sh
 TEST: IPV6 traceroute                                               [FAIL]
 TEST: IPV4 traceroute                                               [ OK ]

 Tests passed:   1
 Tests failed:   1
 $ echo $?
 0

After:

 # ./traceroute.sh
 TEST: IPv6 traceroute                                               [FAIL]
         traceroute6 did not return 2000:102::2
 TEST: IPv4 traceroute                                               [ OK ]
 $ echo $?
 1

Reviewed-by: Petr Machata <petrm@...dia.com>
Reviewed-by: David Ahern <dsahern@...nel.org>
Signed-off-by: Ido Schimmel <idosch@...dia.com>
Link: https://patch.msgid.link/20250908073238.119240-5-idosch@nvidia.com
Signed-off-by: Paolo Abeni <pabeni@...hat.com>
Signed-off-by: Sasha Levin <sashal@...nel.org>
---

LLM Generated explanations, may be completely bogus:

YES

- Fixes a real test bug: Previously the script always exited 0 even when
  subtests failed, making CI and automation miss failures. The commit
  switches the test to the common kselftest lib flow so a failing
  subtest yields a non‑zero exit.
  - Before: the script had its own `log_test()` that bumped
    `nsuccess`/`nfail` and set a `ret=1`, but the script ended by only
    printing counts, not propagating failure via exit status.
    - Removed custom `log_test()` and the `nsuccess`/`nfail` counters
      block at the end. See deletions in
      `tools/testing/selftests/net/traceroute.sh` where the local
      `log_test()` function and the final prints are removed.
  - After: uses standard helpers and exit path from `lib.sh`, so
    failures are reflected in the exit status.
    - Adds per‑test `RET=0` initializations and converts checks to
      `check_err`/`log_test`:
      - `tools/testing/selftests/net/traceroute.sh:171` sets `RET=0` at
        the start of `run_traceroute6()`, then:
        - Replaces `log_test $? 0 "IPV6 traceroute"` with `check_err $?
          "traceroute6 did not return 2000:102::2"` followed by
          `log_test "IPv6 traceroute"`.
      - `tools/testing/selftests/net/traceroute.sh:239` sets `RET=0` at
        the start of `run_traceroute()`, then:
        - Replaces `log_test $? 0 "IPV4 traceroute"` with `check_err $?
          "traceroute did not return 1.0.1.1"` followed by `log_test
          "IPv4 traceroute"`.
    - Returns the aggregated status via kselftest’s exit variable:
      `tools/testing/selftests/net/traceroute.sh:...` changes the tail
      to `exit "${EXIT_STATUS}"` instead of printing counters.
    - These helpers are provided by the shared library already sourced
      at the top (`source lib.sh`), which defines `EXIT_STATUS`, `RET`,
      `check_err`, and `log_test` (e.g.,
      `tools/testing/selftests/net/lib.sh:1`,
      `tools/testing/selftests/net/lib.sh:...`).

- Small and contained: Only modifies
  `tools/testing/selftests/net/traceroute.sh`. No in‑kernel code or
  interfaces change. Behavior of the tests themselves (what they check)
  remains the same; only the reporting/exit semantics are corrected and
  standardized.

- Minimal regression risk: Test-only change. Aligns with established
  kselftest patterns, improves reliability of test outcomes. Output
  format is standardized (e.g., “IPv6” casing), and failures now print a
  clear reason via `check_err`.

- Stable criteria fit:
  - Fixes an important usability bug in the test suite (exit status),
    which affects automated testing and validation workflows.
  - No new features or architectural changes; purely a correctness fix
    to selftests.
  - Touches a noncritical area (selftests), so risk is negligible.
  - Even though the commit message does not explicitly Cc stable,
    selftest fixes of this nature are commonly accepted to stabilize
    testing in stable trees.

Conclusion: Backporting improves CI fidelity for stable kernels with no
kernel runtime risk.

 tools/testing/selftests/net/traceroute.sh | 38 ++++++-----------------
 1 file changed, 9 insertions(+), 29 deletions(-)

diff --git a/tools/testing/selftests/net/traceroute.sh b/tools/testing/selftests/net/traceroute.sh
index b50e52afa4f49..1ac91eebd16f5 100755
--- a/tools/testing/selftests/net/traceroute.sh
+++ b/tools/testing/selftests/net/traceroute.sh
@@ -10,28 +10,6 @@ PAUSE_ON_FAIL=no
 
 ################################################################################
 #
-log_test()
-{
-	local rc=$1
-	local expected=$2
-	local msg="$3"
-
-	if [ ${rc} -eq ${expected} ]; then
-		printf "TEST: %-60s  [ OK ]\n" "${msg}"
-		nsuccess=$((nsuccess+1))
-	else
-		ret=1
-		nfail=$((nfail+1))
-		printf "TEST: %-60s  [FAIL]\n" "${msg}"
-		if [ "${PAUSE_ON_FAIL}" = "yes" ]; then
-			echo
-			echo "hit enter to continue, 'q' to quit"
-			read a
-			[ "$a" = "q" ] && exit 1
-		fi
-	fi
-}
-
 run_cmd()
 {
 	local ns
@@ -205,9 +183,12 @@ run_traceroute6()
 {
 	setup_traceroute6
 
+	RET=0
+
 	# traceroute6 host-2 from host-1 (expects 2000:102::2)
 	run_cmd $h1 "traceroute6 2000:103::4 | grep -q 2000:102::2"
-	log_test $? 0 "IPV6 traceroute"
+	check_err $? "traceroute6 did not return 2000:102::2"
+	log_test "IPv6 traceroute"
 
 	cleanup_traceroute6
 }
@@ -265,9 +246,12 @@ run_traceroute()
 {
 	setup_traceroute
 
+	RET=0
+
 	# traceroute host-2 from host-1 (expects 1.0.1.1). Takes a while.
 	run_cmd $h1 "traceroute 1.0.2.4 | grep -q 1.0.1.1"
-	log_test $? 0 "IPV4 traceroute"
+	check_err $? "traceroute did not return 1.0.1.1"
+	log_test "IPv4 traceroute"
 
 	cleanup_traceroute
 }
@@ -284,9 +268,6 @@ run_tests()
 ################################################################################
 # main
 
-declare -i nfail=0
-declare -i nsuccess=0
-
 while getopts :pv o
 do
 	case $o in
@@ -301,5 +282,4 @@ require_command traceroute
 
 run_tests
 
-printf "\nTests passed: %3d\n" ${nsuccess}
-printf "Tests failed: %3d\n"   ${nfail}
+exit "${EXIT_STATUS}"
-- 
2.51.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ