Commit 9199b915 authored by Jianbo Liu's avatar Jianbo Liu Committed by Steffen Klassert
Browse files

xfrm: fix netdev reference count imbalance



In cited commit, netdev_tracker_alloc() is called for the newly
allocated xfrm state, but dev_hold() is missed, which causes netdev
reference count imbalance, because netdev_put() is called when the
state is freed in xfrm_dev_state_free(). Fix the issue by replacing
netdev_tracker_alloc() with netdev_hold().

Fixes: f8a70afa ("xfrm: add TX datapath support for IPsec packet offload mode")
Signed-off-by: default avatarJianbo Liu <jianbol@nvidia.com>
Reviewed-by: default avatarCosmin Ratiu <cratiu@nvidia.com>
Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 2d531775
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -1331,8 +1331,7 @@ xfrm_state_find(const xfrm_address_t *daddr, const xfrm_address_t *saddr,
			xso->dev = xdo->dev;
			xso->real_dev = xdo->real_dev;
			xso->flags = XFRM_DEV_OFFLOAD_FLAG_ACQ;
			netdev_tracker_alloc(xso->dev, &xso->dev_tracker,
					     GFP_ATOMIC);
			netdev_hold(xso->dev, &xso->dev_tracker, GFP_ATOMIC);
			error = xso->dev->xfrmdev_ops->xdo_dev_state_add(x, NULL);
			if (error) {
				xso->dir = 0;