Patch "ipv4: Fix route deletion when nexthop info is not specified" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ipv4: Fix route deletion when nexthop info is not specified

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ipv4-fix-route-deletion-when-nexthop-info-is-not-spe.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 845eb16dd753154d97d904758f7eeae06d8cce74
Author: Ido Schimmel <idosch@xxxxxxxxxx>
Date:   Thu Nov 24 23:09:32 2022 +0200

    ipv4: Fix route deletion when nexthop info is not specified
    
    [ Upstream commit d5082d386eee7e8ec46fa8581932c81a4961dcef ]
    
    When the kernel receives a route deletion request from user space it
    tries to delete a route that matches the route attributes specified in
    the request.
    
    If only prefix information is specified in the request, the kernel
    should delete the first matching FIB alias regardless of its associated
    FIB info. However, an error is currently returned when the FIB info is
    backed by a nexthop object:
    
     # ip nexthop add id 1 via 192.0.2.2 dev dummy10
     # ip route add 198.51.100.0/24 nhid 1
     # ip route del 198.51.100.0/24
     RTNETLINK answers: No such process
    
    Fix by matching on such a FIB info when legacy nexthop attributes are
    not specified in the request. An earlier check already covers the case
    where a nexthop ID is specified in the request.
    
    Add tests that cover these flows. Before the fix:
    
     # ./fib_nexthops.sh -t ipv4_fcnal
     ...
     TEST: Delete route when not specifying nexthop attributes           [FAIL]
    
     Tests passed:  11
     Tests failed:   1
    
    After the fix:
    
     # ./fib_nexthops.sh -t ipv4_fcnal
     ...
     TEST: Delete route when not specifying nexthop attributes           [ OK ]
    
     Tests passed:  12
     Tests failed:   0
    
    No regressions in other tests:
    
     # ./fib_nexthops.sh
     ...
     Tests passed: 228
     Tests failed:   0
    
     # ./fib_tests.sh
     ...
     Tests passed: 186
     Tests failed:   0
    
    Cc: stable@xxxxxxxxxxxxxxx
    Reported-by: Jonas Gorski <jonas.gorski@xxxxxxxxx>
    Tested-by: Jonas Gorski <jonas.gorski@xxxxxxxxx>
    Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
    Fixes: 6bf92d70e690 ("net: ipv4: fix route with nexthop object delete warning")
    Fixes: 61b91eb33a69 ("ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference")
    Signed-off-by: Ido Schimmel <idosch@xxxxxxxxxx>
    Reviewed-by: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx>
    Reviewed-by: David Ahern <dsahern@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221124210932.2470010-1-idosch@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index e9a7f70a54df..cb24260692e1 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -888,9 +888,11 @@ int fib_nh_match(struct net *net, struct fib_config *cfg, struct fib_info *fi,
 		return 1;
 	}
 
-	/* cannot match on nexthop object attributes */
-	if (fi->nh)
-		return 1;
+	if (fi->nh) {
+		if (cfg->fc_oif || cfg->fc_gw_family || cfg->fc_mp)
+			return 1;
+		return 0;
+	}
 
 	if (cfg->fc_oif || cfg->fc_gw_family) {
 		struct fib_nh *nh;
diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh
index ee5e98204d3d..a47b26ab48f2 100755
--- a/tools/testing/selftests/net/fib_nexthops.sh
+++ b/tools/testing/selftests/net/fib_nexthops.sh
@@ -1228,6 +1228,17 @@ ipv4_fcnal()
 	run_cmd "$IP ro add 172.16.101.0/24 nhid 21"
 	run_cmd "$IP ro del 172.16.101.0/24 nexthop via 172.16.1.7 dev veth1 nexthop via 172.16.1.8 dev veth1"
 	log_test $? 2 "Delete multipath route with only nh id based entry"
+
+	run_cmd "$IP nexthop add id 22 via 172.16.1.6 dev veth1"
+	run_cmd "$IP ro add 172.16.102.0/24 nhid 22"
+	run_cmd "$IP ro del 172.16.102.0/24 dev veth1"
+	log_test $? 2 "Delete route when specifying only nexthop device"
+
+	run_cmd "$IP ro del 172.16.102.0/24 via 172.16.1.6"
+	log_test $? 2 "Delete route when specifying only gateway"
+
+	run_cmd "$IP ro del 172.16.102.0/24"
+	log_test $? 0 "Delete route when not specifying nexthop attributes"
 }
 
 ipv4_grp_fcnal()



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux