]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests: net: lib: remove 'ns' var in setup_ns
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 7 Jun 2024 16:31:05 +0000 (18:31 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 12 Jun 2024 02:30:25 +0000 (19:30 -0700)
The helper setup_ns() doesn't work when a net namespace named "ns" is
passed to it.

For example, in net/mptcp/diag.sh, the name of the namespace is "ns". If
"setup_ns ns" is used in it, diag.sh fails with errors:

  Invalid netns name "./mptcp_connect"
  Cannot open network namespace "10000": No such file or directory
  Cannot open network namespace "10000": No such file or directory

That is because "ns" is also a local variable in setup_ns, and it will
not set the value for the global variable that has been giving in
argument. To solve this, we could rename the variable, but it sounds
better to drop it, as we can resolve the name using the variable passed
in argument instead.

The other local variables -- "ns_list" and "ns_name" -- are more
unlikely to conflict with existing global variables. They don't seem to
be currently used in any other net selftests.

Co-developed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://lore.kernel.org/r/20240607-upstream-net-next-20240607-selftests-mptcp-net-lib-v1-4-e36986faac94@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/lib.sh

index 114b927fee2560556ea48566fe203ea656046543..915f319bcc8bf13b4bf5ede83a0da0b1d0697dc6 100644 (file)
@@ -167,26 +167,30 @@ cleanup_all_ns()
 # setup_ns local remote
 setup_ns()
 {
-       local ns=""
        local ns_name=""
        local ns_list=()
        for ns_name in "$@"; do
+               # avoid conflicts with local var: internal error
+               if [ "${ns_name}" = "ns_name" ]; then
+                       echo "Failed to setup namespace '${ns_name}': invalid name"
+                       cleanup_ns "${ns_list[@]}"
+                       exit $ksft_fail
+               fi
+
                # Some test may setup/remove same netns multi times
                if [ -z "${!ns_name}" ]; then
-                       ns="${ns_name,,}-$(mktemp -u XXXXXX)"
-                       eval "${ns_name}=${ns}"
+                       eval "${ns_name}=${ns_name,,}-$(mktemp -u XXXXXX)"
                else
-                       ns="${!ns_name}"
-                       cleanup_ns "$ns"
+                       cleanup_ns "${!ns_name}"
                fi
 
-               if ! ip netns add "$ns"; then
+               if ! ip netns add "${!ns_name}"; then
                        echo "Failed to create namespace $ns_name"
                        cleanup_ns "${ns_list[@]}"
                        return $ksft_skip
                fi
-               ip -n "$ns" link set lo up
-               ns_list+=("$ns")
+               ip -n "${!ns_name}" link set lo up
+               ns_list+=("${!ns_name}")
        done
        NS_LIST+=("${ns_list[@]}")
 }