• Ido Schimmel's avatar
    ipv4: Fix incorrect TOS in fibmatch route get reply · f036e682
    Ido Schimmel authored
    The TOS value that is returned to user space in the route get reply is
    the one with which the lookup was performed ('fl4->flowi4_tos'). This is
    fine when the matched route is configured with a TOS as it would not
    match if its TOS value did not match the one with which the lookup was
    performed.
    
    However, matching on TOS is only performed when the route's TOS is not
    zero. It is therefore possible to have the kernel incorrectly return a
    non-zero TOS:
    
     # ip link add name dummy1 up type dummy
     # ip address add 192.0.2.1/24 dev dummy1
     # ip route get fibmatch 192.0.2.2 tos 0xfc
     192.0.2.0/24 tos 0x1c dev dummy1 proto kernel scope link src 192.0.2.1
    
    Fix by instead returning the DSCP field from the FIB result structure
    which was populated during the route lookup.
    
    Output after the patch:
    
     # ip link add name dummy1 up type dummy
     # ip address add 192.0.2.1/24 dev dummy1
     # ip route get fibmatch 192.0.2.2 tos 0xfc
     192.0.2.0/24 dev dummy1 proto kernel scope link src 192.0.2.1
    
    Extend the existing selftests to not only verify that the correct route
    is returned, but that it is also returned with correct "tos" value (or
    without it).
    
    Fixes: b6179813 ("net: ipv4: RTM_GETROUTE: return matched fib result when requested")
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Reviewed-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    f036e682
route.c 93.3 KB