• I
    ipv4: Fix incorrect route flushing when source address is deleted · fcd2cb58
    Ido Schimmel 提交于
    stable inclusion
    from stable-v5.10.159
    commit 5211e5ff9ddc67e2cbd5af78e09b8e7d85ca95f2
    category: bugfix
    bugzilla: https://gitee.com/openeuler/kernel/issues/I7NTXH
    
    Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=5211e5ff9ddc67e2cbd5af78e09b8e7d85ca95f2
    
    --------------------------------
    
    [ Upstream commit f96a3d74 ]
    
    Cited commit added the table ID to the FIB info structure, but did not
    prevent structures with different table IDs from being consolidated.
    This can lead to routes being flushed from a VRF when an address is
    deleted from a different VRF.
    
    Fix by taking the table ID into account when looking for a matching FIB
    info. This is already done for FIB info structures backed by a nexthop
    object in fib_find_info_nh().
    
    Add test cases that fail before the fix:
    
     # ./fib_tests.sh -t ipv4_del_addr
    
     IPv4 delete address route tests
         Regular FIB info
         TEST: Route removed from VRF when source address deleted            [ OK ]
         TEST: Route in default VRF not removed                              [ OK ]
         TEST: Route removed in default VRF when source address deleted      [ OK ]
         TEST: Route in VRF is not removed by address delete                 [ OK ]
         Identical FIB info with different table ID
         TEST: Route removed from VRF when source address deleted            [FAIL]
         TEST: Route in default VRF not removed                              [ OK ]
     RTNETLINK answers: File exists
         TEST: Route removed in default VRF when source address deleted      [ OK ]
         TEST: Route in VRF is not removed by address delete                 [FAIL]
    
     Tests passed:   6
     Tests failed:   2
    
    And pass after:
    
     # ./fib_tests.sh -t ipv4_del_addr
    
     IPv4 delete address route tests
         Regular FIB info
         TEST: Route removed from VRF when source address deleted            [ OK ]
         TEST: Route in default VRF not removed                              [ OK ]
         TEST: Route removed in default VRF when source address deleted      [ OK ]
         TEST: Route in VRF is not removed by address delete                 [ OK ]
         Identical FIB info with different table ID
         TEST: Route removed from VRF when source address deleted            [ OK ]
         TEST: Route in default VRF not removed                              [ OK ]
         TEST: Route removed in default VRF when source address deleted      [ OK ]
         TEST: Route in VRF is not removed by address delete                 [ OK ]
    
     Tests passed:   8
     Tests failed:   0
    
    Fixes: 5a56a0b3 ("net: Don't delete routes in different VRFs")
    Signed-off-by: NIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: NDavid Ahern <dsahern@kernel.org>
    Signed-off-by: NJakub Kicinski <kuba@kernel.org>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    Signed-off-by: Nsanglipeng <sanglipeng1@jd.com>
    (cherry picked from commit ef22f90f)
    fcd2cb58
fib_tests.sh 51.3 KB