mlxsw: spectrum_router: Hold a reference on RIF's netdev
Previous patches tried to make RIF deletion more robust and avoid use-after-free situations. As another precaution, hold a reference on a RIF's netdev and release it when the RIF is deleted. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Petr Machata <petrm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
965fa8e600
commit
b61cd7c6f9
|
@ -6302,6 +6302,7 @@ mlxsw_sp_rif_create(struct mlxsw_sp *mlxsw_sp,
|
|||
err = -ENOMEM;
|
||||
goto err_rif_alloc;
|
||||
}
|
||||
dev_hold(rif->dev);
|
||||
rif->mlxsw_sp = mlxsw_sp;
|
||||
rif->ops = ops;
|
||||
|
||||
|
@ -6340,6 +6341,7 @@ err_configure:
|
|||
if (fid)
|
||||
mlxsw_sp_fid_put(fid);
|
||||
err_fid_get:
|
||||
dev_put(rif->dev);
|
||||
kfree(rif);
|
||||
err_rif_alloc:
|
||||
err_rif_index_alloc:
|
||||
|
@ -6367,6 +6369,7 @@ static void mlxsw_sp_rif_destroy(struct mlxsw_sp_rif *rif)
|
|||
if (fid)
|
||||
/* Loopback RIFs are not associated with a FID. */
|
||||
mlxsw_sp_fid_put(fid);
|
||||
dev_put(rif->dev);
|
||||
kfree(rif);
|
||||
vr->rif_count--;
|
||||
mlxsw_sp_vr_put(mlxsw_sp, vr);
|
||||
|
|
Loading…
Reference in New Issue