]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: net: lib.sh: Don't defer failed commands
authorPetr Machata <petrm@nvidia.com>
Thu, 4 Sep 2025 17:07:26 +0000 (19:07 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:20 +0000 (15:37 -0500)
[ Upstream commit fa57032941d4b451c7264ebf3ad595bc98e3a9a9 ]

Usually the autodefer helpers in lib.sh are expected to be run in context
where success is the expected outcome. However when using them for feature
detection, failure can legitimately occur. But the failed command still
schedules a cleanup, which will likely fail again.

Instead, only schedule deferred cleanup when the positive command succeeds.

This way of organizing the cleanup has the added benefit that now the
return code from these functions reflects whether the command passed.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/af10a5bb82ea11ead978cf903550089e006d7e70.1757004393.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/net/lib.sh

index c7add0dc4c6052bc10b1dc3c5c4ac24bbed13bfd..80cf1a75136cfc9c5981dd9eaa4444f6feb0c459 100644 (file)
@@ -547,8 +547,8 @@ ip_link_add()
 {
        local name=$1; shift
 
-       ip link add name "$name" "$@"
-       defer ip link del dev "$name"
+       ip link add name "$name" "$@" && \
+               defer ip link del dev "$name"
 }
 
 ip_link_set_master()
@@ -556,8 +556,8 @@ ip_link_set_master()
        local member=$1; shift
        local master=$1; shift
 
-       ip link set dev "$member" master "$master"
-       defer ip link set dev "$member" nomaster
+       ip link set dev "$member" master "$master" && \
+               defer ip link set dev "$member" nomaster
 }
 
 ip_link_set_addr()
@@ -566,8 +566,8 @@ ip_link_set_addr()
        local addr=$1; shift
 
        local old_addr=$(mac_get "$name")
-       ip link set dev "$name" address "$addr"
-       defer ip link set dev "$name" address "$old_addr"
+       ip link set dev "$name" address "$addr" && \
+               defer ip link set dev "$name" address "$old_addr"
 }
 
 ip_link_has_flag()
@@ -590,8 +590,8 @@ ip_link_set_up()
        local name=$1; shift
 
        if ! ip_link_is_up "$name"; then
-               ip link set dev "$name" up
-               defer ip link set dev "$name" down
+               ip link set dev "$name" up && \
+                       defer ip link set dev "$name" down
        fi
 }
 
@@ -600,8 +600,8 @@ ip_link_set_down()
        local name=$1; shift
 
        if ip_link_is_up "$name"; then
-               ip link set dev "$name" down
-               defer ip link set dev "$name" up
+               ip link set dev "$name" down && \
+                       defer ip link set dev "$name" up
        fi
 }
 
@@ -609,20 +609,20 @@ ip_addr_add()
 {
        local name=$1; shift
 
-       ip addr add dev "$name" "$@"
-       defer ip addr del dev "$name" "$@"
+       ip addr add dev "$name" "$@" && \
+               defer ip addr del dev "$name" "$@"
 }
 
 ip_route_add()
 {
-       ip route add "$@"
-       defer ip route del "$@"
+       ip route add "$@" && \
+               defer ip route del "$@"
 }
 
 bridge_vlan_add()
 {
-       bridge vlan add "$@"
-       defer bridge vlan del "$@"
+       bridge vlan add "$@" && \
+               defer bridge vlan del "$@"
 }
 
 wait_local_port_listen()