• Ido Schimmel's avatar
    ipv4: Invalidate neighbour for broadcast address upon address addition · 0c51e12e
    Ido Schimmel authored
    In case user space sends a packet destined to a broadcast address when a
    matching broadcast route is not configured, the kernel will create a
    unicast neighbour entry that will never be resolved [1].
    
    When the broadcast route is configured, the unicast neighbour entry will
    not be invalidated and continue to linger, resulting in packets being
    dropped.
    
    Solve this by invalidating unresolved neighbour entries for broadcast
    addresses after routes for these addresses are internally configured by
    the kernel. This allows the kernel to create a broadcast neighbour entry
    following the next route lookup.
    
    Another possible solution that is more generic but also more complex is
    to have the ARP code register a listener to the FIB notification chain
    and invalidate matching neighbour entries upon the addition of broadcast
    routes.
    
    It is also possible to wave off the issue as a user space problem, but
    it seems a bit excessive to expect user space to be that intimately
    familiar with the inner workings of the FIB/neighbour kernel code.
    
    [1] https://lore.kernel.org/netdev/55a04a8f-56f3-f73c-2aea-2195923f09d1@huawei.com/Reported-by: default avatarWang Hai <wanghai38@huawei.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Tested-by: default avatarWang Hai <wanghai38@huawei.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0c51e12e
fib_frontend.c 39.4 KB