xfrm: clone XFRMA_REPLAY_ESN_VAL in xfrm_do_migrate
XFRMA_REPLAY_ESN_VAL was not cloned completely from the old to the new. Migrate this attribute during XFRMA_MSG_MIGRATE v1->v2: - move curleft cloning to a separate patch Fixes: af2f464e326e ("xfrm: Assign esn pointers when cloning a state") Signed-off-by: Antony Antony <antony.antony@secunet.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
parent
545e5c5716
commit
91a46c6d1b
@ -1773,21 +1773,17 @@ static inline unsigned int xfrm_replay_state_esn_len(struct xfrm_replay_state_es
|
|||||||
static inline int xfrm_replay_clone(struct xfrm_state *x,
|
static inline int xfrm_replay_clone(struct xfrm_state *x,
|
||||||
struct xfrm_state *orig)
|
struct xfrm_state *orig)
|
||||||
{
|
{
|
||||||
x->replay_esn = kzalloc(xfrm_replay_state_esn_len(orig->replay_esn),
|
|
||||||
|
x->replay_esn = kmemdup(orig->replay_esn,
|
||||||
|
xfrm_replay_state_esn_len(orig->replay_esn),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!x->replay_esn)
|
if (!x->replay_esn)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
x->preplay_esn = kmemdup(orig->preplay_esn,
|
||||||
x->replay_esn->bmp_len = orig->replay_esn->bmp_len;
|
xfrm_replay_state_esn_len(orig->preplay_esn),
|
||||||
x->replay_esn->replay_window = orig->replay_esn->replay_window;
|
|
||||||
|
|
||||||
x->preplay_esn = kmemdup(x->replay_esn,
|
|
||||||
xfrm_replay_state_esn_len(x->replay_esn),
|
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!x->preplay_esn) {
|
if (!x->preplay_esn)
|
||||||
kfree(x->replay_esn);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user