Commit f3ec2b5d authored by Leon Romanovsky's avatar Leon Romanovsky Committed by Steffen Klassert
Browse files

xfrm: don't skip free of empty state in acquire policy



In destruction flow, the assignment of NULL to xso->dev
caused to skip of xfrm_dev_state_free() call, which was
called in xfrm_state_put(to_put) routine.

Instead of open-coded variant of xfrm_dev_state_delete() and
xfrm_dev_state_free(), let's use them directly.

Fixes: f8a70afa ("xfrm: add TX datapath support for IPsec packet offload mode")
Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 982c3aca
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1984,6 +1984,7 @@ static inline void xfrm_dev_state_free(struct xfrm_state *x)
		if (dev->xfrmdev_ops->xdo_dev_state_free)
			dev->xfrmdev_ops->xdo_dev_state_free(x);
		xso->dev = NULL;
		xso->type = XFRM_DEV_OFFLOAD_UNSPECIFIED;
		netdev_put(dev, &xso->dev_tracker);
	}
}
+2 −6
Original line number Diff line number Diff line
@@ -1324,12 +1324,8 @@ xfrm_state_find(const xfrm_address_t *daddr, const xfrm_address_t *saddr,
			struct xfrm_dev_offload *xso = &x->xso;

			if (xso->type == XFRM_DEV_OFFLOAD_PACKET) {
				xso->dev->xfrmdev_ops->xdo_dev_state_delete(x);
				xso->dir = 0;
				netdev_put(xso->dev, &xso->dev_tracker);
				xso->dev = NULL;
				xso->real_dev = NULL;
				xso->type = XFRM_DEV_OFFLOAD_UNSPECIFIED;
				xfrm_dev_state_delete(x);
				xfrm_dev_state_free(x);
			}
#endif
			x->km.state = XFRM_STATE_DEAD;