lkml.org 
[lkml]   [2022]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 092/107] ip: fix triggering of icmp redirect
    Date
    From: Nicolas Dichtel <nicolas.dichtel@6wind.com>

    commit eb55dc09b5dd040232d5de32812cc83001a23da6 upstream.

    __mkroute_input() uses fib_validate_source() to trigger an icmp redirect.
    My understanding is that fib_validate_source() is used to know if the src
    address and the gateway address are on the same link. For that,
    fib_validate_source() returns 1 (same link) or 0 (not the same network).
    __mkroute_input() is the only user of these positive values, all other
    callers only look if the returned value is negative.

    Since the below patch, fib_validate_source() didn't return anymore 1 when
    both addresses are on the same network, because the route lookup returns
    RT_SCOPE_LINK instead of RT_SCOPE_HOST. But this is, in fact, right.
    Let's adapat the test to return 1 again when both addresses are on the same
    link.

    CC: stable@vger.kernel.org
    Fixes: 747c14307214 ("ip: fix dflt addr selection for connected nexthop")
    Reported-by: kernel test robot <yujie.liu@intel.com>
    Reported-by: Heng Qi <hengqi@linux.alibaba.com>
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20220829100121.3821-1-nicolas.dichtel@6wind.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/fib_frontend.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/net/ipv4/fib_frontend.c
    +++ b/net/ipv4/fib_frontend.c
    @@ -389,7 +389,7 @@ static int __fib_validate_source(struct
    dev_match = dev_match || (res.type == RTN_LOCAL &&
    dev == net->loopback_dev);
    if (dev_match) {
    - ret = FIB_RES_NHC(res)->nhc_scope >= RT_SCOPE_HOST;
    + ret = FIB_RES_NHC(res)->nhc_scope >= RT_SCOPE_LINK;
    return ret;
    }
    if (no_addr)
    @@ -401,7 +401,7 @@ static int __fib_validate_source(struct
    ret = 0;
    if (fib_lookup(net, &fl4, &res, FIB_LOOKUP_IGNORE_LINKSTATE) == 0) {
    if (res.type == RTN_UNICAST)
    - ret = FIB_RES_NHC(res)->nhc_scope >= RT_SCOPE_HOST;
    + ret = FIB_RES_NHC(res)->nhc_scope >= RT_SCOPE_LINK;
    }
    return ret;


    \
     
     \ /
      Last update: 2022-09-06 15:56    [W:3.570 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site