• Jiri Pirko's avatar
    mlxsw: spectrum_router: Fix handling of neighbour structure · 33b1341c
    Jiri Pirko authored
    __neigh_create function works in a different way than assumed.
    It passes "n" as a parameter to ndo_neigh_construct. But this "n" might
    be destroyed right away before __neigh_create() returns in case there is
    already another neighbour struct in the hashtable with the same dev and
    primary key. That is not expected by mlxsw_sp_router_neigh_construct()
    and the stored "n" points to freed memory, eventually leading to crash.
    
    Fix this by doing tight 1:1 coupling between neighbour struct and
    internal driver neigh_entry. That allows to narrow down the key in
    internal driver hashtable to do lookups by "n" only.
    
    Fixes: 6cf3c971 ("mlxsw: spectrum_router: Add private neigh table")
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Acked-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    33b1341c
spectrum_router.c 53.5 KB