lkml.org 
[lkml]   [2018]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 035/110] fib_semantics: Dont match route with mismatching tclassid
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Stefano Brivio <sbrivio@redhat.com>


    [ Upstream commit a8c6db1dfd1b1d18359241372bb204054f2c3174 ]

    In fib_nh_match(), if output interface or gateway are passed in
    the FIB configuration, we don't have to check next hops of
    multipath routes to conclude whether we have a match or not.

    However, we might still have routes with different realms
    matching the same output interface and gateway configuration,
    and this needs to cause the match to fail. Otherwise the first
    route inserted in the FIB will match, regardless of the realms:

    # ip route add 1.1.1.1 dev eth0 table 1234 realms 1/2
    # ip route append 1.1.1.1 dev eth0 table 1234 realms 3/4
    # ip route list table 1234
    1.1.1.1 dev eth0 scope link realms 1/2
    1.1.1.1 dev eth0 scope link realms 3/4
    # ip route del 1.1.1.1 dev ens3 table 1234 realms 3/4
    # ip route list table 1234
    1.1.1.1 dev ens3 scope link realms 3/4

    whereas route with realms 3/4 should have been deleted instead.

    Explicitly check for fc_flow passed in the FIB configuration
    (this comes from RTA_FLOW extracted by rtm_to_fib_config()) and
    fail matching if it differs from nh_tclassid.

    The handling of RTA_FLOW for multipath routes later in
    fib_nh_match() is still needed, as we can have multiple RTA_FLOW
    attributes that need to be matched against the tclassid of each
    next hop.

    v2: Check that fc_flow is set before discarding the match, so
    that the user can still select the first matching rule by
    not specifying any realm, as suggested by David Ahern.

    Reported-by: Jianlin Shi <jishi@redhat.com>
    Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
    Acked-by: David Ahern <dsahern@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/fib_semantics.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/net/ipv4/fib_semantics.c
    +++ b/net/ipv4/fib_semantics.c
    @@ -654,6 +654,11 @@ int fib_nh_match(struct fib_config *cfg,
    fi->fib_nh, cfg, extack))
    return 1;
    }
    +#ifdef CONFIG_IP_ROUTE_CLASSID
    + if (cfg->fc_flow &&
    + cfg->fc_flow != fi->fib_nh->nh_tclassid)
    + return 1;
    +#endif
    if ((!cfg->fc_oif || cfg->fc_oif == fi->fib_nh->nh_oif) &&
    (!cfg->fc_gw || cfg->fc_gw == fi->fib_nh->nh_gw))
    return 0;

    \
     
     \ /
      Last update: 2018-03-07 21:11    [W:4.211 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site