selftests: rtnetlink: add small test case with 'promote_secondaries' enabled
authorFlorian Westphal <fw@strlen.de>
Thu, 27 Jun 2019 12:03:33 +0000 (14:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 27 Jun 2019 16:54:35 +0000 (09:54 -0700)
This exercises the 'promote_secondaries' code path.

Without previous fix, this triggers infinite loop/soft lockup:
ifconfig process spinning at 100%, never to return.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/rtnetlink.sh

index ed606a2e386548d91bf812cd1c38b38258553d19..50562888478310348542c869bdb5f9cff7ebced3 100755 (executable)
@@ -269,6 +269,25 @@ kci_test_addrlft()
        echo "PASS: preferred_lft addresses have expired"
 }
 
+kci_test_promote_secondaries()
+{
+       promote=$(sysctl -n net.ipv4.conf.$devdummy.promote_secondaries)
+
+       sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=1
+
+       for i in $(seq 2 254);do
+               IP="10.23.11.$i"
+               ip -f inet addr add $IP/16 brd + dev "$devdummy"
+               ifconfig "$devdummy" $IP netmask 255.255.0.0
+       done
+
+       ip addr flush dev "$devdummy"
+
+       [ $promote -eq 0 ] && sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=0
+
+       echo "PASS: promote_secondaries complete"
+}
+
 kci_test_addrlabel()
 {
        ret=0
@@ -1161,6 +1180,7 @@ kci_test_rtnl()
        kci_test_polrouting
        kci_test_route_get
        kci_test_addrlft
+       kci_test_promote_secondaries
        kci_test_tc
        kci_test_gre
        kci_test_gretap