• Jiri Pirko's avatar
    mlxsw: spectrum_router: Fix error path in mlxsw_sp_vr_create · 0f2d2b27
    Jiri Pirko authored
    Since mlxsw_sp_fib_create() and mlxsw_sp_mr_table_create()
    use ERR_PTR macro to propagate int err through return of a pointer,
    the return value is not NULL in case of failure. So if one
    of the calls fails, one of vr->fib4, vr->fib6 or vr->mr4_table
    is not NULL and mlxsw_sp_vr_is_used wrongly assumes
    that vr is in use which leads to crash like following one:
    
    [ 1293.949291] BUG: unable to handle kernel NULL pointer dereference at 00000000000006c9
    [ 1293.952729] IP: mlxsw_sp_mr_table_flush+0x15/0x70 [mlxsw_spectrum]
    
    Fix this by using local variables to hold the pointers and set vr->*
    only in case everything went fine.
    
    Fixes: 76610ebb ("mlxsw: spectrum_router: Refactor virtual router handling")
    Fixes: a3d9bc50 ("mlxsw: spectrum_router: Extend virtual routers with IPv6 support")
    Fixes: d42b0965 ("mlxsw: spectrum_router: Add multicast routes notification handling functionality")
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Reviewed-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0f2d2b27
spectrum_router.c 191 KB