• David Ahern's avatar
    net: Do not drop to make_route if oif is l3mdev · 28335a74
    David Ahern authored
    Commit deaa0a6a ("net: Lookup actual route when oif is VRF device")
    exposed a bug in __ip_route_output_key_hash for VRF devices: on FIB lookup
    failure if the oif is specified the current logic drops to make_route on
    the assumption that the route tables are wrong. For VRF/L3 master devices
    this leads to wrong dst entries and route lookups. For example:
        $ ip route ls table vrf-red
        unreachable default
        broadcast 10.2.1.0 dev eth1  proto kernel  scope link  src 10.2.1.2
        10.2.1.0/24 dev eth1  proto kernel  scope link  src 10.2.1.2
        local 10.2.1.2 dev eth1  proto kernel  scope host  src 10.2.1.2
        broadcast 10.2.1.255 dev eth1  proto kernel  scope link  src 10.2.1.2
    
        $ ip route get oif vrf-red 1.1.1.1
        1.1.1.1 dev vrf-red  src 10.0.0.2
            cache
    
    With this patch:
        $  ip route get oif vrf-red 1.1.1.1
        RTNETLINK answers: No route to host
    
    which is the correct response based on the default route
    Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    28335a74
route.c 69.1 KB