]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
selftests: netfilter: Stabilize rpath.sh
authorPhil Sutter <phil@nwl.cc>
Fri, 6 Dec 2024 14:08:40 +0000 (15:08 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 Dec 2024 22:15:17 +0000 (23:15 +0100)
On some systems, neighbor discoveries from ns1 for fec0:42::1 (i.e., the
martian trap address) would happen at the wrong time and cause
false-negative test result.

Problem analysis also discovered that IPv6 martian ping test was broken
in that sent neighbor discoveries, not echo requests were inadvertently
trapped

Avoid the race condition by introducing the neighbors to each other
upfront. Also pin down the firewall rules to matching on echo requests
only.

Fixes: efb056e5f1f0 ("netfilter: ip6t_rpfilter: Fix regression with VRF interfaces")
Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
tools/testing/selftests/net/netfilter/rpath.sh

index 4485fd7675ed7e1101cb301cf01aae7d5c1bf39d..86ec4e68594dc34705ac6c911ebb013d6ab3d2c6 100755 (executable)
@@ -61,9 +61,20 @@ ip -net "$ns2" a a 192.168.42.1/24 dev d0
 ip -net "$ns1" a a fec0:42::2/64 dev v0 nodad
 ip -net "$ns2" a a fec0:42::1/64 dev d0 nodad
 
+# avoid neighbor lookups and enable martian IPv6 pings
+ns2_hwaddr=$(ip -net "$ns2" link show dev v0 | \
+            sed -n 's, *link/ether \([^ ]*\) .*,\1,p')
+ns1_hwaddr=$(ip -net "$ns1" link show dev v0 | \
+            sed -n 's, *link/ether \([^ ]*\) .*,\1,p')
+ip -net "$ns1" neigh add fec0:42::1 lladdr "$ns2_hwaddr" nud permanent dev v0
+ip -net "$ns1" neigh add fec0:23::1 lladdr "$ns2_hwaddr" nud permanent dev v0
+ip -net "$ns2" neigh add fec0:42::2 lladdr "$ns1_hwaddr" nud permanent dev d0
+ip -net "$ns2" neigh add fec0:23::2 lladdr "$ns1_hwaddr" nud permanent dev v0
+
 # firewall matches to test
 [ -n "$iptables" ] && {
        common='-t raw -A PREROUTING -s 192.168.0.0/16'
+       common+=' -p icmp --icmp-type echo-request'
        if ! ip netns exec "$ns2" "$iptables" $common -m rpfilter;then
                echo "Cannot add rpfilter rule"
                exit $ksft_skip
@@ -72,6 +83,7 @@ ip -net "$ns2" a a fec0:42::1/64 dev d0 nodad
 }
 [ -n "$ip6tables" ] && {
        common='-t raw -A PREROUTING -s fec0::/16'
+       common+=' -p icmpv6 --icmpv6-type echo-request'
        if ! ip netns exec "$ns2" "$ip6tables" $common -m rpfilter;then
                echo "Cannot add rpfilter rule"
                exit $ksft_skip
@@ -82,8 +94,10 @@ ip -net "$ns2" a a fec0:42::1/64 dev d0 nodad
 table inet t {
        chain c {
                type filter hook prerouting priority raw;
-               ip saddr 192.168.0.0/16 fib saddr . iif oif exists counter
-               ip6 saddr fec0::/16 fib saddr . iif oif exists counter
+               ip saddr 192.168.0.0/16 icmp type echo-request \
+                       fib saddr . iif oif exists counter
+               ip6 saddr fec0::/16 icmpv6 type echo-request \
+                       fib saddr . iif oif exists counter
        }
 }
 EOF