summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAntony Antony <antony.antony@secunet.com>2020-09-04 08:49:55 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-10-14 09:46:23 +0200
commit62457d397b90697b3b805d2316becfa9fd25580e (patch)
tree2a5c3c67c1ba1d5e13f3c8b185b36f4037563b17 /include
parent9b9dcd96e5b43905ece89d72883a08c42886ebf9 (diff)
xfrm: clone XFRMA_REPLAY_ESN_VAL in xfrm_do_migrate
[ Upstream commit 91a46c6d1b4fcbfa4773df9421b8ad3e58088101 ] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'include')
-rw-r--r--include/net/xfrm.h16
1 files changed, 6 insertions, 10 deletions
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 89685c7bc7c0..7a9c18deaa51 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1730,21 +1730,17 @@ static inline int xfrm_replay_state_esn_len(struct xfrm_replay_state_esn *replay
static inline int xfrm_replay_clone(struct xfrm_state *x,
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);
if (!x->replay_esn)
return -ENOMEM;
-
- x->replay_esn->bmp_len = orig->replay_esn->bmp_len;
- 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),
+ x->preplay_esn = kmemdup(orig->preplay_esn,
+ xfrm_replay_state_esn_len(orig->preplay_esn),
GFP_KERNEL);
- if (!x->preplay_esn) {
- kfree(x->replay_esn);
+ if (!x->preplay_esn)
return -ENOMEM;
- }
return 0;
}