• Xin Long's avatar
    ipv4: not do cache for local delivery if bc_forwarding is enabled · b470bcc4
    Xin Long authored
    [ Upstream commit 0a90478b ]
    
    With the topo:
    
        h1 ---| rp1            |
              |     route  rp3 |--- h3 (192.168.200.1)
        h2 ---| rp2            |
    
    If rp1 bc_forwarding is set while rp2 bc_forwarding is not, after
    doing "ping 192.168.200.255" on h1, then ping 192.168.200.255 on
    h2, and the packets can still be forwared.
    
    This issue was caused by the input route cache. It should only do
    the cache for either bc forwarding or local delivery. Otherwise,
    local delivery can use the route cache for bc forwarding of other
    interfaces.
    
    This patch is to fix it by not doing cache for local delivery if
    all.bc_forwarding is enabled.
    
    Note that we don't fix it by checking route cache local flag after
    rt_cache_valid() in "local_input:" and "ip_mkroute_input", as the
    common route code shouldn't be touched for bc_forwarding.
    
    Fixes: 5cbf777c ("route: add support for directed broadcast forwarding")
    Reported-by: default avatarJianlin Shi <jishi@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b470bcc4
route.c 81.1 KB