]> git.baikalelectronics.ru Git - kernel.git/commit
ipv4: not do cache for local delivery if bc_forwarding is enabled
authorXin Long <lucien.xin@gmail.com>
Sun, 2 Jun 2019 11:10:24 +0000 (19:10 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 Jun 2019 23:59:21 +0000 (16:59 -0700)
commit8e7cc73dc3380a5d73383fb84c3755c0a9d5327f
treed0adef52f77f02ee94d1111cb9bc537c539e81c4
parentd6b5d5e587aa9a85ec006e949fb49b845386f4b5
ipv4: not do cache for local delivery if bc_forwarding is enabled

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: 11ff1ab979ae ("route: add support for directed broadcast forwarding")
Reported-by: Jianlin Shi <jishi@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/route.c